Regex заменяет все, что соответствует любому персонажу - PullRequest
2 голосов
/ 11 июля 2010
a[b].innerHTML=a[b].innerHTML.replace(RegExp('['+bbc[c][0]+']','ig'),bbc[c][1])

Это в основном то, с чем я работаю. Он обернут в две петли, чтобы объяснить, почему он выглядит так, как он работает. В основном я хочу заменить что-то, что соответствует '[' + переменная из массива + ']'. Я делаю сценарий BBCode для бесплатного форума, и не надо указывать мне какие-либо сценарии BBCode. Проблема в том, что регулярное выражение заменяет все, что соответствует любому символу. Таким образом, он заменяет [, q, c, o, d, e,] на вторую часть массива. (QCODE - пример используемого BBCode) Я не знаю, делает ли он это в обычном / регулярном выражении / с [], но это чертовски раздражает. Я пытался избежать [] ('\ [' + v + '\]'), я пробовал eval (), я пробовал все, что вы можете себе представить. Мне нужно заставить эту вещь работать так, как она должна, потому что все настроено так, как должно быть. Если вы знаете, как это исправить, пожалуйста, ответьте. Я хотел бы, чтобы вы проверили свое решение, прежде чем ответить, потому что у вас есть нет представления о том, сколько методов я пытался заставить эту работу.

Ответы [ 2 ]

3 голосов
/ 11 июля 2010

Используйте правильный escape-символ:

RegExp('\\['+bbc[c][0]+'\\]','ig'),

/ - это обычный символ (за исключением литералов регулярных выражений, которые вы не используете), escape-символ \.Вы также должны дважды убежать, один раз для строкового литерала и один раз для регулярного выражения.

1 голос
/ 11 июля 2010

Причина, по которой ваш код не работает, заключается в том, что вы используете RegExp, который принимает строку для регулярного выражения. В этой строке вам нужно экранировать экранирующий символ обратной косой черты. Будет работать следующее:

​var str = 'Before. [qcode] After.';
alert(str.replace(RegExp('\\[qcode\\]', 'ig'), 'During.'));​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...