我需要一些帮助来尝试清理字符串。我写了一个正则表达式,非常接近于给出我想要的结果,但我不能完全正确。我收到的字符串采用这种格式。
||a|assa||asss||ssss
管道字符基本上是占用文本分隔符的占位符。但是,我试图找到看起来像这样的东西。
|a|b|c|d
换句话说,我只想删除连续的管道。我已经把一个小例子放在一起来说明我的尝试并且继续悲惨地失败。
const str1 = "||a||jump|fences||in the street";
const str2 = "im a wolf";
const hasPipe = /\|{1}\+/;//if the | is consecutevely repeated more than once than deleted.
console.log(hasPipe.test(str1));
console.log(str1.replace(hasPipe, ""))
console.log(hasPipe.test(str2));

上述代码的预期结果应该是。
|a|jump|fences|in the street"
有人可以指出我正确的方向或指出我的愚蠢错误。
答案 0 :(得分:2)
不多了:
\|\|+
替换为|
答案 1 :(得分:2)
鉴于您的测试字符串const str1 = "||a||jump|fences||in the street";
,您希望使用单个管道替换多次出现的 pipe |
。
有几种方法可以匹配非空序列:
+
=匹配前一个表达式的1 或更多
{n,m}
=至少匹配 n 但不超过 m 次数。
{n,}
=至少匹配 n 且无限次。
简单:
str1.replace(/\|+/g, "|")
"|a|jump|fences|in the street"
匹配一个或多个管道并替换为单个管道。这将用管道替换单个管道。
更确切地说:
str1.replace(/\|{2,}/g, "|")
"|a|jump|fences|in the street"
匹配两个或更多(因为逗号后没有最大值)管道并替换为单个管道。这不会打扰用另一个管道替换单个管道。
还有几种方法可以匹配完全两个管道,如果你永远不会有3个或更多的运行:
str1.replace(/\|\|/, "|");
str1.replace(/\|{2}/, "|");
答案 2 :(得分:2)
您可以使用+
查找连续有一个或多个管道的所有位置,并用一个管道替换它们。你的正则表达式只是:
/\|+/g
这是一个示例,具有可变数量的管道:
const str1 = "||a|||jump|fences||||in the street";
var filtered_str1 = str1.replace(/\|+/g,"|")
console.log(filtered_str1);

答案 3 :(得分:1)
您可以替换这样的连续管道字符:
const pat = /\|{2,}/gm;
const str = `||a|||jump|fences||in the street`;
const sub = `|`;
const res = str.replace(pat, sub);
console.log('result: ', res);
结果:
|a|jump|fences|in the street