Разбор JS-выражения из строки - PullRequest
0 голосов
/ 25 апреля 2018

С учетом строки, такой как (которая является исходным файлом javascript):

"...attr1: i, TARGET: <JS_EXPRESSION>, attr3: {..."

Как я могу разобрать выражение Javascript, используя известный ключ TARGET?

Выражение JS может быть произвольно сложным и содержать запятые, поэтому, похоже, регулярное выражение не сработает, если не найти начальный целевой ключ, TARGET.Окружающий код также может содержать любой произвольный код JS.

Вот что я пытался доказать, что это не домашнее задание:

return source.replace(/TARGET: ([^,]*),/g, function(a, b){
  return operationOnExpression(b);
});

Но это не удается в более сложных случаях <E>, например console.log('hi', 'there');

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Вы можете извлечь выражение, используя пару разбиений, создать тег сценария, содержащий это выражение, и добавить его к head

const str = "...attr1: i, TARGET: console.log('here', 1), attr3: {..."

const exp = str.split('TARGET')[1].split(',').slice(0, -1).join().slice(1)

const script = document.createElement('script');
script.text = exp;

document.getElementsByTagName('head')[0].appendChild(script);
0 голосов
/ 25 апреля 2018

Если значения слева от столбца TARGET не могут содержать запятые, вы можете использовать их, просматривая следующую запятую, пока не увидите нужное количество «столбцов» или пока не увидите «TARGET» в качественачало следующего столбца.То же самое для столбцов справа.В Javascript вы можете использовать substr и indexOf несколько раз, чтобы сделать это.

Если это бесполезно, больше информации, например, какой язык вы используете, что вы уже пробовали, будь то JSвыражение будет заключено в кавычки, было бы полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...