首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不包括卷曲大括号匹配

不包括卷曲大括号匹配
EN

Stack Overflow用户
提问于 2020-03-31 10:08:09
回答 2查看 89关注 0票数 0

我有以下字符串:

  1. logger.debug('123',123)
  2. logger.debug(123,123)
  3. logger.debug('1bc','test')
  4. logger.debug('1bc',test)
  5. logger.debug('1bc',测试)
  6. logger.debug('1bc',{})
  7. logger.debug('1bc',{})
  8. logger.debug('1bc',{test})
  9. logger.debug('1bc',{ test })
  10. logger.debug('1bc',{ test})
  11. logger.debug('1bc',{test })

代替debug,可以有其他调用,如warnfatal等。所有的引号对都可以是""''``

我需要创建一个普通的快车,它与1-5但不是6- 11匹配。

这就是我想出来的:

代码语言:javascript
复制
logger.*\(['`].*['`],\s*.([^{.*}])

这也符合8-11,所以我怀疑这部分是错误的,([^{.*}]),但我不明白为什么。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-31 10:31:13

你可以试试这个

代码语言:javascript
复制
logger\.[^(]+\((?:"(?:\\"|[^"])*"|'(?:\\'|[^'])*'|`(?:\\`|[^`])*`),[^{}]*?\)

Regex Demo

P.S:如果我们确信引号不会错配,如果字符串中没有转义引号,这个模式可以缩短。

如果没有转义字符串

代码语言:javascript
复制
logger\.[^(]+\((?:"[^"]*"|'[^']*'|`[^`]*`),[^{}]*?\)

如果字符串之间没有引号。也就是没有像"mr's jhon这样的字符串

代码语言:javascript
复制
logger\.[^(]+\(([`"'])[^"'`]*\1,[^{}]*?\)
票数 3
EN

Stack Overflow用户

发布于 2020-03-31 10:41:19

如果引用的部分之间没有引号,则可以使用捕获组匹配引用类型之一(['`"]),并使用反向引用\1匹配结束引号类型。

否定字符类中的\r\n不跨越换行符边界。

该模式将匹配引用的部分或1+时间的第一部分的单词字符。

第二部分匹配除{})以外的使用否定字符类的任何字符。

代码语言:javascript
复制
logger\.[^(\r\n]+\((?:(['`"])[^'`"]+\1|\w+),[^{})\r\n]+\)

那就匹配了

  • logger\.匹配logger.
  • [^(\r\n]+匹配1+乘以除(或换行符以外的任何字符
  • \(匹配(
  • (?:非捕获群
    • (['`"])捕获组1
    • [^'`"]+\1匹配1+乘以除引号类型以外的任何字符,向捕获的字符反向引用
    • |
    • \w+匹配1+单词字符

  • ),关闭非捕获组并匹配,
  • [^{})\r\n]+匹配1+乘以除{ } )或换行符以外的任何字符
  • \)匹配)

Regex演示

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60948059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档