如何在字符串中全局替换管道符号“|”?

16

如何在字符串中全局替换|(竖杠)符号?当我试图用"so|me|str|ing".replace(/|/g, '-')替换它时,我得到的结果是"-s-o-|-m-e-|-s-t-r-|-i-n-g-"

5个回答

33

| 具有特殊含义A|B 表示“匹配 A 或 B”),因此需要进行转义:

"so|me|str|ing".replace(/\|/g, '-');

8

|表示“或”,因此您需要像这样转义它:\|


6

尝试使用"so|me|str|ing".replace(/[|]/g, '-')。

这是一个很好的用于处理正则表达式的资源:https://www.regex101.com/


0
在我的情况下,管道是作为一个变量出现的,因此我无法使用这些解决方案中的任何一个。相反,您可以使用以下方法:
let output_delimiter  ='|';
let str= 'Foo|bar| Test';

str.replace(new RegExp('[' + output_delimiter + ']', 'g'), '-')

//should be 'Foo-bar- Test'

0
另一种解决方案是,使用子字符串替换而不是正则表达式来替换管道字符。然而,String.prototype.replace() 方法只会替换第一个子字符串实例,就像这里一样:
"so|me|str|ing".replace("|", "-"); // "so-me|str|ing" → WRONG

可能的解决方法:

  1. 将字符串拆分为数组,并使用新的分隔符进行连接:
"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() -- 请注意,此方法目前仅由少数浏览器支持:

"so|me|str|ing".replaceAll("|", "-"); // "so-me-str-ing" → RIGHT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接