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

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

其中sourcevalue = rgb(255,0,0)targetvalue = #FFFFFF,但sourcevaluetargetvalue代替,为什么呢?正则表达式.replace()不工作

+0

你可以做同样的上的jsfiddle但琐碎的变量,而不是'选择器[I] .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\\)"; 

括号用于分组/回引用匹配。如果你想匹配他们字面上,你必须用\逃脱他们。由于sourcevalue是一个字符串,并且\也是字符串中的转义字符,所以必须转义反斜杠才能创建一个字符。

否则,表达式将匹配rgb255,0,0而不是rgb(255,0,0)

+0

谢谢你的回答 – gaurav