【问题标题】:extract word from string usinfg regex in js在js中使用正则表达式从字符串中提取单词
【发布时间】:2021-10-27 02:03:22
【问题描述】:

accusantique et o (MLS® R2608327)。 Sed ut perspiciatis voluptatem mls 清单 :MLS&reg#:12243235435 beatae vitae dicta MLS Number#:12243235435 sunt 3543654654675645654654 解释。

鉴于上面的字符串,我如何在字符串中提取“(MLS® R2608327)”或“MLS&reg#:12243235435”或“MLS Number#:12243235435”?它的值可能会改变,因为这是动态的。因此,其他实例可能是“135435”。位置/顺序也可能发生变化,可能在中间或最后部分。

这个正则表达式

^ ((MLS|mls|MLS|MLS&reg|mls&reg|Mls&reg|MLS®|MLS®编号|mls 编号|Mls 编号|mls®|Mls®|属性 ID|)[^A-Za-z0-9])?(([^?*/\:; ]{1,23}\d{2,23}[^?*/\ :; ]{1,23}) *)$

这个正则表达式运行良好,但它没有从 dfnjkgfkhgb mls:#234234245 fgjhfgf 3498234789 dshfdsfgbjhsf 之类的字符串中提取 mls:#w3432423。

【问题讨论】:

  • 查看 Reference - What does this regex mean? 和 regex tag wiki 并使用像 RegEx101 这样的正则表达式调试器。
  • 如果省略锚点,则模式似乎与 dfnjkgfkhgb mls:#234234245 fgjhfgf 3498234789 dshfdsfgbjhsf. 中的 mls:#w3432423 匹配 也许您可以稍微缩短模式并使用不区分大小写的标志 /i 参见 regex101.com/r/VAvfcg/1 请注意,在示例字符串,您将获得与组 1 和组 2 的多个匹配项,例如使用 matchAll
  • 非常感谢@Thefourthbird,它运行良好。但它也在拾取数字,就像它也在拾取“3498234789”一样。有没有办法在这个正则表达式中添加一个条件,它只匹配以这三个字符“MLS”开头的字符串
  • @TestID 你是这个意思吗? \b((?:MLS(?:&reg|®?(?: Number)?))[^A-Za-z0-9]*)([^?*\/\\:;<> ]{1,23}\d{2,23}[^?*\/\\:;<> ]{1,23})regex101.com/r/c2Y8OV/1
  • 非常感谢@Thefourthbird 这非常有效。

标签: javascript regex-greedy regexp-replace


【解决方案1】:

使用不区分大小写的匹配,您可以使用:

\b(MLS(?:&reg|®?(?: Number)?)[^A-Za-z0-9]*)([^?*\/\\:;<> ]{1,23}\d{2,23}[^?*\/\\:;<> ]{1,23})

部分模式匹配:

  • \b防止部分匹配的单词边界
  • ( 捕获第 1 组
    • MLS 字面匹配
    • (?:非捕获组
      • &amp;reg 字面匹配
      • |或者
      • ®?(?: Number)? 匹配可选 ® 和可选 Number
    • )关闭非捕获组
    • [^A-Za-z0-9]* 匹配列表以外的可选字符
  • )关闭第一组
  • ( 捕获第 2 组
    • [^?*\/\\:;&lt;&gt; ]{1,23} 匹配除所列字符之外的任何字符的 1-23 次重复
    • \d{2,23} 匹配 2 个 -23 位
    • [^?*\/\\:;&lt;&gt; ]{1,23} 匹配除所列字符以外的任何字符的 1-23 次重复
  • )关闭第二组

Regex demo

【讨论】:

    猜你喜欢
    • 2011-03-09
    • 2019-03-18
    • 2016-02-24
    • 2017-12-17
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多