javascript - 忽略正则表达式中的组匹配
问题描述
帮助使用正则表达式(javascript 风格):
这第一个正则表达式(我称之为“引号正则表达式”)将匹配匹配引号(单/双)之间的所有内容:/((?<quote>["']).*?\k<quote>)/i
然后我有这个(让我们称之为“标签正则表达式”)/(?<=\s?)\S+:((?<quote>["']).*?\k<quote>|\(.*?\)|.*?(?=\s)|.*)/i
::
This should match:
tag:something
tag:"something in double quotes"
tag:'something in single quotes'
tag:(between brackets)
[tag] -> can be any word
我需要的是从“引用正则表达式”的结果中忽略“标记正则表达式”
我尝试了消极/积极的前瞻/后视,但它要么匹配所有内容,要么什么都不匹配......
有趣的是,在不应该匹配的内容和应该匹配的内容之间使用换行符(?
https://regex101.com/r/1KEHfW/1
我正在分享一个指向 regex101 的链接,它的“工作”,但我在第一行放了一个换行符,如果你删除它停止工作的断行。
解决方案
你这里有问题:
tag:"something in double quotes"
tag:'something in single quotes'
您已经指定了一个贪婪的通配符聚合器*
,因此您无法区分它在下面一行中从第一个"
到最后一个匹配的引号配对类型。'
要匹配引号对,您需要指定如下内容:
\"[^"]*\"|\'[^']*\'|\([^\)]*\)
这意味着三种选择之一:
- 双引号,后跟不等于双引号的任意数量的字符,后跟双引号。
- 或单引号,后跟不等于单引号的任意数量的字符,后跟单引号。
- 或左括号,后跟不等于右括号的任意数量的字符(请参阅下面的注释),然后是右括号。
如果您缩短正则表达式以考虑任何类型的引号,那么引号不会相互配对,并且您会在模式识别中引入 Wild 空间。
注意: 如果你打算嵌套括号,就像在算术表达式中一样,有一个坏消息,因为正则表达式可以匹配任意正则语言,但是一种允许嵌套结构的语言,比如括号引入的结构,不是正则的,而是上下文无关的,并且您可以设计(以及正则表达式)以匹配嵌套括号的任何语法都必须将嵌套深度限制在固定的有界限制内。我不建议您遵循使用正则表达式来解析绑定有限表达式的方法,因为正则表达式的大小在最大边界嵌套级别下增长非常快。
推荐阅读
- java - 在 Spring Boot 中获取 GET API 服务中的重复列表值
- python - 如何自动合并依赖机器人更新(配置版本 2)?
- sql - 由于 ENUM,无法使用脚本创建表
- wcf - 连接到 Web 服务时出现意外的 401 错误(可能与 kerberos \ double hop 错误有关)
- c# - C#,使用布尔值验证用户输入的字母和空格
- php - 显示加密的数据库字段
- assembly - 为什么汇编程序可以在高级语言中工作
- java - 如何使用 FCM 令牌向 Android 中的特定用户发送通知?
- r - 用列名检索 data.frame 列的最佳方法是什么?
- powershell - 从 Powershell 中的数组中删除模式