【问题标题】:Matching all expressions using JS regex使用 JS 正则表达式匹配所有表达式
【发布时间】:2020-08-01 06:26:02
【问题描述】:

我需要匹配所有包含 2 个或超过 3 个单词的表达式(例如:Laugh at Loud (LoL))。我的正则表达式仅适用于具有 3 个字符长表达式的文本。如何使正则表达式非常通用(不将长度指定为 3)以便选择表达式,即使它们的长度是任意的。

共享的链接提供了它的概述。

最后一个表达式

受激辐射(LASER)的光放大 未使用以下正则表达式选择绿色技能发展计划 (GSDP)

\b(\w)[\w']*[^a-zA-Z()]* (\w)[\w']*[^a-zA-Z()]* (\w)[\w']*[^a-zA-Z()]* \(\1\2\3\)

\b(?:\w[\w']* [^a-zA-Z]*){3} ?\([A-Z]{3}\)

https://regex101.com/r/QPMo5M/1

【问题讨论】:

  • 正则表达式用于模式匹配,因此如果您要寻求帮助构建正则表达式,您首先需要确定您要查找的模式的定义。更新您的问题以包含您用简单英语称为“缩写”的模式的定义。然后有人可能会帮你把它翻译成正则表达式。
  • 请仔细理解问题。上面的“可能”不是这里的地方。如果你有信心,那我很感激你。
  • [嗨!我想你可以在这里找到答案](stackoverflow.com/questions/1508147/…)
  • 请通过提供所有有效和无效的匹配项清楚地解释问题
  • 非常粗略(我敢肯定 some1 会想出更好的东西),但类似于 this 的东西可以让你开始。老实说,不确定我是否会推荐regex

标签: javascript regex string


【解决方案1】:

您可以尝试以下方法:

/\b(\w)[-'\w]* (?:[-'\w]* ){1,}\(\1[A-Z]{1,}\)/gi

更新

作为@ikegamicommented,这个草率的正则表达式也匹配Bring some drinks (beer)Bring something to put on the grill (BBQ)之类的东西。我认为在进行正则表达式匹配后,可以使用适当的 JavaScript 代码过滤这些情况。也许在Bring some drinks (beer)的情况下,我们可以通过(beer)没有大写字母的事实来检测它。对于Bring something to put on the grill (BBQ),我们可以利用Bring something to put on the grill中的第二个BQ没有匹配的首字母来检测它。


更新 2

当我们使用上面的正则表达式匹配以下字符串时:

We need to use technologies from Natural Language Processing (NLP).

它匹配“need to use technologies from Natural Language Processing (NLP)”,而不是“Natural Language Processing (NLP)”。这些问题也应该解决。


更新 3

以下正则表达式匹配长度为 2 到 5 的首字母缩写词,并且不存在上述问题。而且我认为它可以很容易地扩展到支持更长的长度:

/\b(\w)\S* (?:(?:by |of )?(\w)\S* (?:(?:by |of )?(\w)\S* (?:(?:by |of )?(\w)\S* (?:(?:by |of )?(\w)\S* )?)?)?) *\(\1\2\3\4\5\)/gi

【讨论】:

  • 它认为Bring some drinks (beer) 是一个首字母缩略词。 OP 的现有解决方案没有。
  • regex101.com/r/QPMo5M/5 Most common mis'~!@-take (MCM) 不会被选中。知道如何克服这个
  • @CodeGuy 我更新了我的答案,使其正确匹配 MCM。
  • ...然后,OP 还说 by stimulated emission of radiation (LASER) 应该被视为首字母缩略词。 耸耸肩
  • @ikegami 你是什么意思?它匹配light amplification by stimulated emission of radiation (LASER)
【解决方案2】:
\b(\w)[-'\w]* (?:[-`."?,~=@!/\\|+:;%°*#£&^€$¢¥§'\w]* ){2,}\(\1[A-Z]{2,}\)

我在中间放了一些特殊字符

【讨论】:

  • 你可以考虑把{2,}'s 改为{1,}'s,因为你说你也想匹配2个单词的缩写。我更新了我的答案并将这些更改应用于我的答案中的正则表达式,以便它可以匹配post script (PS) :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-22
相关资源
最近更新 更多