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 \"-s-
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'
|
has special meaning (A|B
means "match A or B"), so you need to escape it:
"so|me|str|ing".replace(/\|/g, '-');
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
"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()
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
Try using "so|me|str|ing".replace(/[|]/g, '-')
This is a great resource for working with RegEx: https://www.regex101.com/
|
means OR
, so you have to escape it like this: \|