Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:如何用匹配的组搜索和替换多个项目?_Javascript_Regex - Fatal编程技术网

Javascript:如何用匹配的组搜索和替换多个项目?

Javascript:如何用匹配的组搜索和替换多个项目?,javascript,regex,Javascript,Regex,假设我有一根像 "item:(one|two|three), item2:(x|y)" 有没有一个正则表达式可以将其考虑在内 "item:one, item:two, item:three, item2:x, item2:y" 还是我必须求助于拆分和循环 如果我必须把它分开,那我该怎么转呢 "item:(one|two|three)" 进入 如果括号之间的内容量是可变的?正则表达式对这样的问题没有用处吗?您可以通过回调函数来实现: str = str.replace(/(\w+):\((

假设我有一根像

"item:(one|two|three), item2:(x|y)"
有没有一个正则表达式可以将其考虑在内

"item:one, item:two, item:three, item2:x, item2:y"
还是我必须求助于拆分和循环

如果我必须把它分开,那我该怎么转呢

"item:(one|two|three)"
进入


如果括号之间的内容量是可变的?正则表达式对这样的问题没有用处吗?

您可以通过回调函数来实现:

 str = str.replace(/(\w+):\(([^)]*)\)/gi, function(match,item,values)
     {return item + ':' + values.split("|").join(', '+item+':')}
 );
对于每个项,正则表达式中的第一个括号捕获项的名称,即item,第二组未替换的括号捕获所有值的字符串,即1 | 2 | 3。后者在|处拆分并与、itemname:连接在一起,然后在结果的开头追加另一个项名称


这可能是组合正则表达式以查找数据并拆分和连接以构建新正则表达式的最简单方法。问题是为什么不容易,你不能在不同的捕获组中捕获任意数量的连续值1 | 2 | 3。如果您试图单独捕获它们,则只能获取最后一个。

您可以使用回调函数:

 str = str.replace(/(\w+):\(([^)]*)\)/gi, function(match,item,values)
     {return item + ':' + values.split("|").join(', '+item+':')}
 );
对于每个项,正则表达式中的第一个括号捕获项的名称,即item,第二组未替换的括号捕获所有值的字符串,即1 | 2 | 3。后者在|处拆分并与、itemname:连接在一起,然后在结果的开头追加另一个项名称



这可能是组合正则表达式以查找数据并拆分和连接以构建新正则表达式的最简单方法。问题是为什么不容易,你不能在不同的捕获组中捕获任意数量的连续值1 | 2 | 3。如果你试图单独捕获它们,你只能得到最后一个。

这不是在发展而不是分解吗?你必须同时进行匹配和拆分/循环。你的问题令人困惑。你能给出预期输入和输出的样本吗?@Hans然后他举了一个例子,我想Hans,我举了。你想要更多的样本?这不是在开发而不是分解吗?你必须同时做匹配和拆分/循环。你的问题让人困惑。你能给出预期输入和输出的样本吗?@Hans然后他举了一个例子,我想Hans,我举了。你想要更多的样品吗?哪些部分不清楚?在你写评论时,我已经添加了一些解释;你的答案很好,也很清楚,我只需要通读代码,我想你在使用一些我不熟悉的技巧。我喜欢整个带有拆分和联接的1行返回语句:@Moss,请注意,如果您的值可以包含右括号,我的解决方案将导致问题。还要注意的是,它允许字母、数字和下划线作为项目名称,而不是不清楚部分的值的结束部分?在你写评论时,我已经添加了一些解释;你的答案很好,也很清楚,我只需要通读代码,我想你在使用一些我不熟悉的技巧。我喜欢整个带有拆分和联接的1行返回语句:@Moss,请注意,如果您的值可以包含右括号,我的解决方案将导致问题。还请注意,它允许将字母、数字和下划线作为项目名称,并允许除值的结尾部分以外的任何内容