【问题标题】:Match parenthesis containing specific character匹配包含特定字符的括号
【发布时间】:2016-12-15 13:12:00
【问题描述】:

我有一个字符串:

var string = "116 b (407) (90 A / 122 M) (11.2004)"

在该字符串中,我想匹配特定括号 () 及其上下文(即 (90 A / 122 M)),包括特定字符 /

我试过了:

string.match(/\([/]\)/g)

但这会返回null。我究竟做错了什么? 最好的问候

【问题讨论】:

  • 你的意思是你想匹配 only 如果括号内有斜线?顺便说一句,我建议使用像 regex101.com 这样的网站,它会“大声朗读”你的正则表达式给你听。这应该可以帮助您轻松找到问题。您正在寻找一组括号,它们之间有一个斜杠字符。

标签: javascript regex match


【解决方案1】:

您的\([/]\) 模式匹配(,然后是/,然后是),一个3 字符序列。

你可以使用

/\([^()]*\/[^()]*\)/g

this regex demo

详情

  • \( - 开头 ( 括号
  • [^()]* - 除了() 之外的零个或多个字符(可以在末尾添加\/ 以稍微提高性能:[^()\/]*
  • \/ - / 符号
  • [^()]* - 除了() 之外的零个或多个字符
  • \) - 右括号

【讨论】:

  • 您不想遵循更具体的正则表达式吗?例如/\(\d+ [A-Z] \/ \d+ [A-Z]\)/g =>(数值单位/数值单位)
  • @Mr.Polywhirl:任务不是为所讨论的字符串建议一个精确的模式,而是匹配包含特定字符的括号。是的,否则,我会提出类似的建议。
【解决方案2】:

你可以试试string.match(/\([^)]*\)/g)

这可能会给你想要的:

["(407)", "(90 A / 122 M)", "(11.2004)"]

【讨论】:

  • 他似乎只想匹配带有斜线的括号。
  • @torazaburo 我几乎不这么认为..!或者我误会了你
  • @torazaburo 这很奇怪......我希望 OP 在这个问题上有更多的上下文。仅将括号与斜线匹配是奇怪的,并且会增加查找匹配项所需的时间。
【解决方案3】:

试试这个:

/\([^(/]*\/[^)]*\)/g

Online Pattern

【讨论】:

  • 也谢谢你:)
猜你喜欢
  • 2022-07-06
  • 1970-01-01
  • 1970-01-01
  • 2021-01-02
  • 2021-02-21
  • 2013-09-26
  • 2014-11-17
  • 1970-01-01
  • 2012-07-24
相关资源
最近更新 更多