将它们放入正则表达式时,我是否必须转义斜杠?
myString = '/courses/test/user';
myString.replace(/\/courses\/([^\/]*)\/.*/, "$1");
document.write(myString);
它不打印“test”,而是打印整个源字符串。
参见此演示:
答案 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"))