2012-05-10 3 views
1
RegEx = new RegExp(sourcevalue, "gi"); 

temp[i] = Selectors[i].cssText.replace(RegEx, targetvalue); 

где sourcevalue = rgb(255,0,0) и targetvalue = #FFFFFF, но sourcevalue не заменяется targetvalue, почему?RegEx .Надеть() не работает

+0

Не могли бы вы сделать то же самое на jsfiddle но с тривиальными переменными, а не 'Искатели [я] .cssText' – zerkms

+0

Показать все соответствующие код. Parens - это специальные символы в регулярных выражениях, вы избегаете их должным образом? – Jon

+0

Почему бы изменить 'sourcevalue'? Результат находится в 'temp [i]'. Ты закодировал это! – leppie

ответ

1

Потому что sourcevalue является правильным регулярным выражением Javascript, но оно не работает так, как вы ожидали. В регулярном выражении есть специальные символы, такие как круглые скобки(). Они используются для группировки частей регулярных выражений. Для того, чтобы использовать их с их «буквальное» meaing вам придется избежать их, используя обратную косую черту

var RegEx = /rgb\(255,0,0\)/gi; 
+0

спасибо за ответ – gaurav

4

Скорее всего, потому что вы не миновал скобку правильно:

var sourcevalue = "rgb\\(255,0,0\\)"; 

Скобки используются для группировки/обратно ссылающихся матчей. Если вы хотите совместить их буквально, вам нужно с ними связаться \. Так как является строкой, а \ является символом escape в строке, вы должны избегать обратной косой черты, чтобы создать литерал.

В противном случае выражение будет соответствовать rgb255,0,0, но не rgb(255,0,0).

+0

спасибо за ответ – gaurav

Смежные вопросы