2014-12-12 4 views
0

Я пытаюсь заменить любое появление [start] или [end] в строке, определенной пользователем. Я хочу, чтобы это было не чувствительны к регистру, так что бы также заменить [Start], [ПУСК] и т.д.Javascript заменить на RegExp, повторяя себя?

Пример входной строки

var eventLabel = "BPY [start]"; 

Вот что я пытаюсь

var result = eventLabel.replace(new RegExp("[start]", "gi"), "replaced"); 

Вот содержимое результат после замены

BPY [replacedreplacedreplacedreplacedreplaced] 

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

Кто-нибудь знает, что происходит?

ответ

1

Вам нужно избежать символа [, потому что [ является специальным метасимволом в регулярном выражении, что означает начало класса символов. Чтобы сопоставить строки [start] или [end], не забудьте поместить их в группу, как показано ниже.

var result = eventLabel.replace(new RegExp("\\[(?:start|end)\\]", "gi"), row['startTime']); 

ИЛИ

var result = eventLabel.replace(/\[(?:start|end)\]/gi, row['startTime']); 
+1

Там нет никаких оснований для 'нового RegExp' здесь, и, безусловно, хорошая причина * не *, чтобы использовать его. Вместо этого: 'var result = eventLabel.replace (/ \ [(?: start | end) \]/gi, row ['startTime']);' –

1

[start] означает "заменить любой из s, t, a или r".

Вам нужно избежать скобки:

var result = eventLabel.replace(new RegExp("\\[(start|end)\\]", "gi"), "replaced");