Javascript RegExp帮助

时间:2011-08-01 15:54:40

标签: javascript regex

我正在尝试用Javascript替换某个文本。

newexp是一个变量。 numexp是一个变量

replacenamestring = new RegExp('Memberresumeexp\[1\]',"ig");
newexp = newexp.replace(replacenamestring,'Memberresumeexp[' + numexp + ']');

上述替换不起作用。

这是怎么回事。

newexp = newexp.replace(/Memberresumeexp\[1\]/ig,'Memberresumeexp[' + numexp + ']');

无法找出原因?

3 个答案:

答案 0 :(得分:4)

您的第一行创建了一个Javascript字符串,然后将该字符串解析为正则表达式。

Javascript字符串文字使用\作为转义字符,因此\不是字符串值的一部分。因此,正则表达式中的[]不会被转义,因此它会创建一个字符类。
您需要通过编写\来转义\\

答案 1 :(得分:1)

这是一个简单的词法语法问题。在第一种情况下,您将使用构造函数创建RegExp对象,该构造函数从字符串常量开始。好吧,字符串常量有自己的语法怪癖,特别是字符串中的那些反斜杠将在其自己的解析过程中被解释。调用RegExp构造函数时,已消失。

“本机”RegExp语法有自己的引用规则,当您使用该语法时,模式的“[”和“]”部分会被正确解释。

答案 2 :(得分:1)

这是一个有一个BIG警告的工作示例 - 我将“[1]”更改为“[\ d +]”,以防万一您需要更多Memberresumeexp[<any number>]个案例。另外,我硬编码了numexp,因为我还没有看到它是如何被初始化的。

var replacenamestring = new RegExp('Memberresumeexp\\[\\d+\\]',"ig");

var newexp = "asdfasdflkj;lakwjef Memberresumeexp[1] asdfasdfasdf\nqwerqwerwer Memberresumeexp[2] qwerqwerwqerewr\n";

var numexp = 123;
if(replacenamestring.test(newexp))
{
    newexp = newexp.replace(replacenamestring,'Memberresumeexp[' + numexp + ']');
}