如何使用JavaScript正则表达式匹配重复序列

时间:2019-01-09 19:44:54

标签: javascript regex sequence

我想使用javascript replace()函数和regex替换字符串的一部分。

我有一个与此相似的字符串

(x=(1.22|2|3) && za=(hello|world|there|wow)||yy=(2|3))

最终目标是使用javascript将其转化为以下内容

(x=1.22|2|3 && za=hello|world|there|wow||yy=2|3)

我试图将replace()方法与正则表达式和捕获组一起使用。 我遇到问题的地方是正则表达式。 我可以捕获something=,我可以使用(\w+=)进行捕获。 但是我不知道如何捕获括号中的内容

1.22|2|3
hello|world|there|wow
2|3

那些用|分隔的值可以是字符串,整数或小数。 我已经尝试过--

/(\w*\.?\w+\|\w*\.?\w+)/g
但这只会捕获“某物”组。因此,对于“ 1.22 | 2 | 3”,仅会捕获“ 1.22 | 2”。 我已经尝试了该正则表达式的不同变体,但无法弄清楚如何捕获所有`|`分隔的内容。

非常感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用

s = s.replace(/(\w=)\(([^()]+)\)/g, "$1$2");

详细信息

  • (\w=)-第1组:一个单词char和一个=
  • \(-一个(字符
  • ([^()]+)-第2组:除()之外的一个或多个字符
  • \)-一个)字符。

请参见regex demo

或者,如果必须在括号内使用管道字符,请使用

s = s.replace(/(\w=)\(([^()|]+(?:\|[^()|]+)+)\)/g, "$1$2");

请参见another regex demo。这里,第2组模式不同于第一个模式:

  • [^()|]+-除()|以外的1个或多个字符
  • (?:\|[^()|]+)+-重复1次或更多次
    • \|-管道字符
    • [^()|]+-除()|以外的1个或多个字符