如何全局替换字符串中的|
(管道)符号?当我尝试将其替换为"so|me|str|ing".replace(/|/g, '-')
时,我得到"-s-o-|-m-e-|-s-t-r-|-i-n-g-"
答案 0 :(得分:22)
|
有special meaning(A|B
表示"匹配A或B"),因此您需要将其转义:
"so|me|str|ing".replace(/\|/g, '-');
答案 1 :(得分:7)
|
表示OR
,因此你必须像这样逃避它:\|
答案 2 :(得分:4)
尝试使用"所以| me | str | ing" .replace(/ [|] / g,' - ')
这是使用RegEx的绝佳资源:https://www.regex101.com/
答案 3 :(得分:0)
在我的情况下,管道是作为变量来的,因此我无法使用任何这些解决方案。相反,您可以使用:
let output_delimiter ='|';
let str= 'Foo|bar| Test';
str.replace(new RegExp('[' + output_delimiter + ']', 'g'), '-')
//should be 'Foo-bar- Test'
答案 4 :(得分:0)
另一种解决方案是执行子字符串替换而不是用正则表达式替换管道字符。但是,String.prototype.replace()方法将仅替换第一个子字符串实例,如下所示:
"so|me|str|ing".replace("|", "-"); // "so-me|str|ing" → WRONG
"so|me|str|ing".split("|").join("-"); // "so-me-str-ing" → RIGHT
var str = "so|me|str|ing";
while(str.indexOf("|") >= 0) {
str = str.replace("|", "-"); // "so-me|str|ing" → RIGHT
}
.replaceAll()
使用现代方法String.prototype.replaceAll()-请注意,此方法还只是supported by a few browsers:
"so|me|str|ing".replaceAll("|", "-"); // "so-me-str-ing" → RIGHT