带有转义斜杠的JavaScript正则表达式不会替换

时间:2011-01-12 21:26:44

标签: javascript regex escaping

将它们放入正则表达式时,我是否必须转义斜杠?

myString = '/courses/test/user';
myString.replace(/\/courses\/([^\/]*)\/.*/, "$1");
document.write(myString);

它不打印“test”,而是打印整个源字符串。

参见此演示:

http://jsbin.com/esaro3/2/edit

5 个答案:

答案 0 :(得分:43)

你的正则表达式是完美的,是的,你必须逃避斜杠,因为JavaScript使用斜杠来表示正则表达式。

然而,问题是JavaScript的replace方法不执行就地替换。也就是说,它实际上并没有改变字符串 - 它只是给你替换的结果。

试试这个:

myString = '/courses/test/user';
myString = myString.replace(/\/courses\/([^\/]*)\/.*/, "$1");
document.write(myString);

这会将myString设置为替换值。

答案 1 :(得分:12)

/[\/]/g匹配正斜杠 /[\\]/g匹配反斜杠。

答案 2 :(得分:9)

string.replace不会修改原始字符串。相反,a返回一个已执行替换的新字符串。

尝试:

myString = '/courses/test/user';
document.write(myString.replace(/\/courses\/([^\/]*)\/.*/, "$1"));

答案 3 :(得分:9)

实际上,在示例的一部分中,您不需要在字符类内部转义斜杠(即,[^\/]*只是[^/]*)。如果它在一个字符类之外(就像你的例子的其余部分,如\/courses),那么你需要转义斜杠。

答案 4 :(得分:1)

请注意,如果您使用/构造函数,则不必逃脱new RegExp()

console.log(new RegExp("a/b").test("a/b"))