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

时间:2015-04-12 19:14:08

标签: javascript regex

如何全局替换字符串中的|(管道)符号?当我尝试将其替换为"so|me|str|ing".replace(/|/g, '-')时,我得到"-s-o-|-m-e-|-s-t-r-|-i-n-g-"

5 个答案:

答案 0 :(得分:22)

|special meaningA|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

可能的解决方法:

  1. 将字符串拆分为数组,并使用新的定界符将其连接:
"so|me|str|ing".split("|").join("-"); // "so-me-str-ing" → RIGHT
  1. 使用循环将一个子字符串替换为另一个子字符串。
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