что я не могу разделить символ ‘(‘ используя это регулярное выражение в javascipt

#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);