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

Rad*_*mko 33 javascript regex escaping

将它们放入正则表达式时,我是否必须逃避斜线?

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

它不打印"test",而是打印整个源字符串.

看这个演示:

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

Rei*_*eid 43

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

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

试试这个:

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

这将设置myString为替换值.


raj*_*_kw 13

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

  • 而 `/[\/|\\]/g` 匹配正斜杠和反斜杠。 (2认同)

Bre*_*mir 10

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


Ano*_*on. 9

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

尝试:

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