#javascript #regex
#javascript #регулярное выражение
Вопрос:
переменные codigo имеют значение * int a,h;float b,c;a=b *(c h);
мое регулярное выражение:
codigo = codigo.split(/(b;|b,|b[=]|b[ ]|b[-]|b[*]|b[/]|b[(]|b[)]|bint|bfloat|bchar)/)
и в качестве вывода я получаю это:
["int", "a", ",", "h", ";", "float", "b", ",", "c", ";", "a", "=", "b", "*", "(c", " ", "h", ")", ";", "$"]
var codigo = 'int a,h;float b,c;a=b*(c h);'
codigo = codigo.replace(/s/g, '')
codigo = codigo.split(/(b;|b,|b[=]|b[ ]|b[-]|b[*]|b[/]|b[(]|b[)]|bint|bfloat|bchar)/).filter(car => car != "")
console.log(codigo)
почему после ‘*’ ‘(‘ не разделяется правильно? когда ‘)’ работает правильно?
Комментарии:
1. ваш код выдает правильный вывод. вот ссылка
2. я думаю, что это должно дать мне правильный вывод, но по какой-то причине он не работает, я скопировал и вставил ваше регулярное выражение, и оно тоже не сработало
3. Какой фактический результат вы хотите здесь получить?
4. почти такой же, как тот, который я получаю, но символ ‘(‘ неправильно разделяется
5. @SifatHaque — строка, которую вы использовали, отличается от строки OP. В нем отсутствует
*
. Изначально я допустил ту же ошибку, потому что строка в вопросе отличается от строки в StackSnippet .
Ответ №1:
Граница между *
и (
или /
не является границей слов.
Здесь вам нужно изменить нижний регистр b
на верхний B
:
|B[(]|
var codigo = 'int a,h;float b,c;a=b*(c h);'
codigo = codigo.replace(/s/g, '')
codigo = codigo.split(/(b;|b,|b[=]|b[ ]|b[-]|b[*]|b[/]|B[(]|b[)]|bint|bfloat|bchar)/).filter(car => car != "")
console.log('index 14: ',codigo[14], ' index 15: ', codigo[15], ' array: ', codigo );
Ответ №2:
В регулярных выражениях, поскольку .
представляет любой символ, его должно быть достаточно для разделения следующим регулярным выражением:
codigo = codigo.split(/(int|float|char|.)/);
а затем удалите пустые строковые элементы, используя .filter(Boolean)
.
Рабочий пример:
var codigo = 'int a,h;float b,c;a=b*(c h);'
codigo = codigo.replace(/s/g, '');
codigo = codigo.split(/(int|float|char|.)/);
codigo = codigo.filter(Boolean);
console.log(codigo);