(?:x) 字符的意义何在
What is the point of the (?:x) character?
本文关键字:字符 更新时间:2023-09-26
可能的重复项:
非捕获组?
我正在学习 JavaScript 中的正则表达式,(?:x)
字符或"非捕获括号"对我来说毫无意义。如果您不想记住比赛,为什么不完全放弃括号呢?使用/(?:x)/
而不仅仅是/x/
有什么优势?
因为您可能出于其他原因需要括号。例如,假设您要捕获 abababababab9
末尾的数字。如果你写ab*('d)
那么它将匹配abbbbbbbbb9
.您需要将ab
括起来,以便*
运算符将重复整个操作。 (ab)*('d)
.但也许你不在乎ab
重复了多少次。这就是您使用(?:)
的地方:(?:ab)*('d)
。
考虑以下情况:
(?:aa|bb|cc)
(?:abc)?
您可以使用非捕获组来匹配具有更复杂子模式的模式。在某些情况下,使用非捕获组语法也会导致更有效的正则表达式。
您需要它来定义要在替代匹配或与量词一起使用的子模式,这些子模式将应用于整个子模式,而不会浪费捕获槽。例如,您可以将(?:)
与 |
一起使用,以便在正则表达式中间提供备用匹配项,而无需捕获它。
如果您不想记住比赛,为什么不完全放弃括号呢?使用/(?:x(/而不是仅使用/x/有什么好处?
当您想要对字符进行分组但又不想记住它们时,它会使用。如果删除括号,则无法对字符序列进行分组。因此,例如:
/foo|bar/.test("foo") // true
/foo|bar/.test("bar") // true
如果要实现与foor
和fbar
匹配的模式,则必须将字符分组在中间:
/f(?:oo|ba)r/.test("fbar") // true
/f(?:oo|ba)r/.test("foor") // true
当然,您也可以分组并记住该组,但是如果test
使用match
或其他方法返回的数组对您很重要,那么您必须改用(?:
。
相关文章:
- 在JavaScript中输出转义字符
- 不同浏览器中的空白字符正则表达式行为
- Regex匹配除“”之外的所有字符;.js”;
- 拆分文本以每隔n个字符添加一行新行,并注意空格
- 使用RegExp查找url中的字符
- 如何为jQuery屏蔽输入插件创建一个允许字母数字、空格和重音字符的掩码
- 使用正则表达式将输入格式设置为单字符逗号、单字符逗号等
- 允许在文本框中使用某些字符
- 根据页面的位置突出显示文本中的字符
- 元素的内容必须由格式正确的字符数据或标记组成
- 如何将字符串拆分为字符,但在javascript中保留空格
- 使用Google Maps API向标记添加多个字符
- 处理JSON字符串会导致JavaScript错误
- 单元格的工具提示或标题不显示超过2000个字符
- javascript替换换行符和特殊字符
- angularjs删除动态形式元素中的特殊字符
- 元素名称上带有短划线 (-) 字符的 Json 对象
- 无法呈现js unicode字符“u1F310”
- 从指定范围创建字符数组
- 附加“;显示更多“;仅当满足设定的字符数时,链接到截断的段落