简体   繁体   中英

How to globally replace pipe symbol “|” in string

How can I globally replace the | (pipe) symbol in a string? When I try to replace it with "so|me|str|ing".replace(/|/g, '-') , I get "-so-|-me-|-str-|-ing-"

| has special meaning ( A|B means "match A or B"), so you need to escape it:

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

| means OR , so you have to escape it like this: \\|

Try using "so|me|str|ing".replace(/[|]/g, '-')

This is a great resource for working with RegEx: https://www.regex101.com/

In my case, the pipe was coming as an variable, so I couldn't use any of these solutions. Instead, You can use:

let output_delimiter  ='|';
let str= 'Foo|bar| Test';

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

//should be 'Foo-bar- Test'

Another solution is, to do a substring replacement instead of a regex to replace the pipe character. However, the String.prototype. replace () method will only replace the first substring instance, like here:

"so|me|str|ing".replace("|", "-"); // "so-me|str|ing" → WRONG

Possible workarounds:

  1. Split the string into an array and join it with the new delimiter:
"so|me|str|ing".split("|").join("-"); // "so-me-str-ing" → RIGHT
  1. Use a loop to replace one substring after the other.
var str = "so|me|str|ing"; 
while(str.indexOf("|") >= 0) {
  str = str.replace("|", "-"); // "so-me|str|ing" → RIGHT
}

Use .replaceAll()

Use the modern approach String.prototype. replaceAll () -- beware, that this method is only supported by a few browsers yet:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM