gpt4 book ai didi

javascript - 正则表达式。如何从此字符串中获取多个匹配项?

转载 作者:行者123 更新时间:2023-11-29 10:13:34 25 4
gpt4 key购买 nike

我正在使用 javascript 正则表达式。假设我有以下字符串:

XXX_1_XXX XXX_2_XXX XXX_3_XXX YYY_1_YYY YYY_2_YYY YYY_3_YYY

我想运行一个正则表达式并使用这种模式获得结果:

Match1
1. XXX_1_XXX
2. YYY_1_YYY
Match2
1. XXX_2_XXX
2. YYY_2_YYY
Match3
1. XXX_3_XXX
2. YYY_3_YYY

我试过这个的变体:

/(XXX_(.)_XXX)(.)*?(YYY_\2_YYY)/g

但它只在第一次匹配时停止。

有什么办法可以用正则表达式做到这一点吗?或者我最好将它作为一个数组进行迭代?

最佳答案

匹配在字符串上迭代,正则表达式仅在上一个匹配结束后搜索更多匹配。这保证了进度,因为空字符串会导致无限循环。

但是你可以按如下方式解决这个问题:

var text = "XXX_1_XXX XXX_2_XXX XXX_3_XXX YYY_1_YYY YYY_2_YYY YYY_3_YYY";
var re = /(XXX_(.)_XXX)(.)*?(YYY_\2_YYY)/;
while((m = re.exec(text)) !== null) {
alert(JSON.stringify(m));//the result (print)
//do something with m
text = text.substring(m.index+1); //this is not the same as /g
// "/g" would be text = text.substring(m.index+m[0].length+1);
}

该程序的工作方式如下:您不使用 /g 修饰符,因此只完成一次匹配。

  1. 每次迭代,您都尝试将字符串与正则表达式匹配
  2. 如果它匹配,您确定匹配开始的 .index 并将字符串(包括)删除到该点
  3. 您使用修改后的字符串重复搜索,直到该字符串也找不到收敛。

JSFiddle .

Note: there is one case where this might fail: if the empty string can be matched as well, since at the end of the string, it will keep matching the empty string and cutting will result in another empty string. It's however easy to implement a zero-length-check. This issue does not occur with @Ja͢ck's answer.


Note: another aspect that one must take into account is that this doesn't require "global" progression. The string XXX_1_XXX XXX_2_XXX XXX_3_XXX YYY_1_YYY YYY_3_YYY YYY_2_YYY (mind the swapped values in the YYY_|_YYYY part), will give the same result.

关于javascript - 正则表达式。如何从此字符串中获取多个匹配项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27886099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com