为什么JS RegEx提取多个值(只有一个匹配)
Why does JS RegEx pull multiple values (only one that matches)?
好吧,这是我完全在努力学习。。。在我的JS控制台中,为什么会发生这种情况:
"[test]".match(/'[('w+)']/)
=> ["[test]", "test"]
在上面的例子中,我只是期望"test"
,为什么有2个结果?
这让我感到困惑的原因是,我实际上正在尝试使用以下(相同的正则表达式,带有g
修饰符)
"type[][random][][test]".match(/'[('w+)']/g)
有了以上内容,我原本希望得到的是,只知道RegEx是这样的:
["random", "test"]
考虑到上面的原始问题和控制台中的实验,我现在希望得到的是这样的东西:
["[random]", "random", "[test]", "test"]
我实际得到的是:
["[random]", "[test]"]
有人能解释为什么上面发生的事情会发生吗?
为了获得更多上下文,我试图通过查找括号中的所有单词,然后取出最后一个单词,来获得最后一组括号中的单词(即"test"
)。但因为我发现的行为并不是我所期望的,我基本上不得不做一些非常多余的事情,比如:
"type[][random][][test]".match(/'[('w+)']/g).slice(-1)[0].match(/'[('w+)']/).slice(-1)[0]
=> "test"
我觉得这不对
正如文档所说,它将返回以下内容:
一个数组,包含整个匹配结果和括号捕获匹配的结果,或者如果没有匹配的则为空
这就解释了你为什么会得到这个:
"[test]".match(/'[('w+)']/)
=> ["[test]", "test"]
由于正则表达式匹配括号内的任何内容([]
),因此它匹配括号中的[test]
和test
。
但如果你挂上全球旗帜,再试一次:
"[test]".match(/'[('w+)']/g)
=> ["[test]"]
全局标志将使其只返回匹配项,而不返回圆括号捕获的结果。要理解,您可以查看以下内容:
"[test][test2]".match(/'[('w+)']/)
=> ["[test]", "test"]
"[test][test2]".match(/'[('w+)']/g)
=> ["[test]", "[test2]"]
相关文章:
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- 如何在只能有一个asp.net表单的主页上从asp.net页面中的javascript中获取值
- 制作一个regex来验证只有一个数字的字符串
- 有可能在来自链接的警报中有一个值吗
- 是否<asp:文本框>有一个onFocusLost事件
- 让谷歌数据图表有一个24小时x轴
- PayPal按钮是否有一个简单的选项,其中金额基于一些用户输入
- 我确实有一个表单,如果用户输入了输入,它应该检查否定或空的输入框,并抛出一条警告消息
- 在这个使用hasOwnProperty的对象扩展程序中有一个错误,I'我不确定那个bug是什么,也不确定这个扩展
- 当知道同一hiearch中至少有一个元素时,遍历到元素.结构使用jquery
- PNG图像被覆盖,但每个图像都有一个链接可以更改,每次一个-Javascript/jQuery/CSS
- JQuery是否有一个“;移动“;作用或者有没有一种更紧凑的方法来做到这一点
- Regex或javascript每X个连续单词中有一个单词
- Jquery时间启动计时器,我有一个计时器的代码,但它在页面加载时启动
- 是否有一个javascript库来解析简单的查询
- 在一个函数中,我有一个未捕获的语法错误:意外的标记else
- 检查一个元素是否有一个类与另一个类总是返回true
- 我有一个用幻灯片制作的网页,但幻灯片会在屏幕上移动
- Regex Javascript(必须有一个数字和字符)
- Regex用于名称验证,至少有一个alpahbet(A-z)