2011-07-13 45 views
3

我有一个字符串

test =" abc" 

我需要更换之间“=“”和‘ABC’与$符号的每一个空间的长度代替正则表达式匹配所以这里应该成为

test ="$$$$abc" 

我试图做这样。

str.replace(/(=")(\s+)/g,"$1" + "$2".replace(/\s/g, "$")) 

我打算做的是与$ 1我正在提取=“字符串的一部分。然后我试图将正则表达式($ 2)的第二个匹配转换为一个字符串。我认为“$ 2”在扩展$ 2反向引用后会给我字符串''。然后用这个扩展字符串,我试图再次调用replace来尝试将这些空格转换为$。之后,我追加$ 1和替换$ 2得到=“$$$$。但我意识到$ 2不会扩展到''。有什么方法可以操纵反向引用的字符串并使用该操作版本来代替我的字符串的内容。

回答

2

您可以使用该功能match,后来加入的结果。

m = str.match(/(.*)(=")(\s+)(.*)/); 
str = m[1]+m[2]+m[3].replace(/\s/g, "$")+m[4]; 
4

谢谢您的回答霍华德。无论如何,我发现了另一种方式来做到这一点。看来你可以传递一个函数作为替换函数的第二个参数,当在匹配的字符串中找到一个匹配的字符串时,这个函数将被调用,匹配字符串中的匹配项,匹配括号中的字符串, ire字符串。然后匹配将被从此函数返回的字符串替换

str. replace(/(=")(\s+)/g, function(match,p1,p2,offset,str){return match.replace(/\s/g,"$")})