我得到的结果是:的Javascript:奇怪的正则表达式的行为
_a_b_|_c_d_
使用下面的代码/正则表达式时
:
var separator = "|";
var ex = new RegExp(separator,"g");
var result = "ab|cd".replace(ex, "_");
console.log(result);
为什么会那样做的?
我期望(和希望)只能更换所有管道中的字符串:
ab_cd
我得到的结果是:的Javascript:奇怪的正则表达式的行为
_a_b_|_c_d_
使用下面的代码/正则表达式时
:
var separator = "|";
var ex = new RegExp(separator,"g");
var result = "ab|cd".replace(ex, "_");
console.log(result);
为什么会那样做的?
我期望(和希望)只能更换所有管道中的字符串:
ab_cd
你应该逃避你的正则表达式的|
象征,因此,它将匹配一个|
符号。在正则表达式|
称为逻辑OR运算符,通常用于合并或OR两个正则表达式。
获得_a_b_|_c_d_
作为输出的原因是什么?
我已经说过|
被称为逻辑OR运算符。它的语法就像regex1|regex2|regex3|regex4.......
等等。但在你的案例|
中,在OR(|
)操作符之前和之后没有模式。所以它会在每个角色前后都进行零宽度匹配。用_
代替零宽度匹配会给你_a_b_|_c_d_
。
> var separator = "\\|";
undefined
> var ex = new RegExp(separator,"g");
undefined
> var result = "ab|cd".replace(ex, "_");
undefined
> console.log(result);
ab_cd
OR
> var separator = /\|/g;
undefined
> var ex = new RegExp(separator);
undefined
> var result = "ab|cd".replace(ex, "_")
undefined
> console.log(result);
ab_cd
试试这个:
var separator = "\\|";
var ex = new RegExp(separator,"g");
var result = "ab|cd".replace(ex, "_");
console.log(result);
alert(result);
因为在正则表达式还有一个特殊的意义| [要么]。
请参阅本link理解为正则表达式中的每个特殊字符,这需要逃脱\
希望这有助于意义。
这似乎是重点,但“var separator =”\ |“;”不起作用。 – Thariama 2014-09-03 11:12:21
+1就是这样 - 我只是想知道为什么我必须使用两个反斜杠 – Thariama 2014-09-03 11:13:14
因为模式被包含在''“''中。如果在'/'符号中给出,则不需要再次反转反斜杠。 – 2014-09-03 11:14:08