2014-02-04 4 views
0

Как заменить все sting + variable? Почему я не могу заменить все [0] и [1] на new? Вот простой пример, в реальной ситуации, [0] [1] [2] ... с большим условием. Благодарю.javascript заменить всю строку и переменную глобальным

var a='some thing [0] [1] [0] [1] '; 
for(var i=0; i<3; i++){ 
    a.replace(new RegExp(" ["+i+"] ", 'g'),' new'); 
} 
alert(a); 

http://jsfiddle.net/P8HSA/

ответ

3

Поскольку

# 1

Ваше регулярное выражение теперь (например, с 0 [0]); Это будет соответствовать <space>0<space/> Вы, вероятно, ищете " \\["+i+"\\] " в скобках специальный символ,

# 2

Вы не сохранение результата из замены, вы должны сделать:

a = a.replace(new RegExp(" \\["+i+"\\] ", 'g'),'new');

Comebine что, и вы получите

var a='some thing [0] [1] [0] [1] '; 
for(var i=0; i<3; i++){ 
    a = a.replace(new RegExp(" \\["+i+"\\] ", 'g'),'new'); 
} 
alert(a); 

Which outputs (Fiddle)some thingnewnewnewnewnew, и я надеюсь, что это ожидаемый результат.

Последнее, но не менее важное: это злоупотребление регулярными выражениями, и вы можете легко have a one line solution.

+0

Это лучший ответ, который мне нужен. Благодарю. –

0

Я хотел бы сделать это следующим образом:

var a='some thing [0] [1] [0] [1] '; 
a = a.replace(/\[[0-2]\]/g,' new'); 
alert(a); 

для цикла является излишеством здесь, так как регулярные выражения могут сделать это из коробки. Также я рекомендую буквальный синтаксис /.../.

Работа скрипку: http://jsfiddle.net/P8HSA/6/

1

Замените все номера между [и] на .

var a = 'some thing [0] [1] [0] [1] '; 

a = a.replace(/\[\d\]/g, 'new'); 

Demo

0

Строки неизменны и replace делает вернуть новое, измененное значение. Вы должны будете передать его на a переменную самостоятельно (см Replace method doesn't work):

a = a.replace(new RegExp(" ["+i+"] ", 'g'), ' new'); 

Тем не менее, это не достаточно, чтобы заставить его работать, так как [] обозначают character class в регулярном выражении. Для того, чтобы соответствовать их буквально, вы должны избавиться от них с помощью обратной косой черты (и снова в строке буквального):

a = a.replace(new RegExp(" \\["+i+"\\] ", 'g'), ' new'); 

Теперь вы можете использовать фактический класс символов, чтобы соответствовать все цифры от 0 до 2 одновременно :

var a = 'some thing [0] [1] [0] [1] '; 
alert(a.replace(/\[[0-3]\]/g, ' new')); // regex literal to simplify syntax 
Смежные вопросы