Javascript正则表达式用管道清理字符串

时间:2018-05-25 17:45:14

标签: javascript regex

我需要一些帮助来尝试清理字符串。我写了一个正则表达式,非常接近于给出我想要的结果,但我不能完全正确。我收到的字符串采用这种格式。 ||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" 有人可以指出我正确的方向或指出我的愚蠢错误。

4 个答案:

答案 0 :(得分:2)

不多了:
\|\|+替换为|

https://regex101.com/r/vvkrI0/1/

答案 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