我想使用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”。
我已经尝试了该正则表达式的不同变体,但无法弄清楚如何捕获所有`|`分隔的内容。
非常感谢。
答案 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个或多个字符