在js中使用正则表达式从字符串中提取单词

Posted

技术标签:

【中文标题】在js中使用正则表达式从字符串中提取单词【英文标题】:extract word from string usinfg regex in 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\d2,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\d2,23[^?*\/\\:;<> ]1,23)regex101.com/r/c2Y8OV/1 非常感谢@Thefourthbird 这非常有效。 【参考方案1】:

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

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

部分模式匹配:

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

Regex demo

【讨论】:

以上是关于在js中使用正则表达式从字符串中提取单词的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式 - 尝试从字符串中提取 5 位单词(presto)

[使用正则表达式从python文本中提取特定单词

在js中使用正则表达式从字符串中提取正确的用户名

使用正则表达式从字符串中提取 ICCID

正确使用正则表达式提取单词

如何使用JavaScript正则表达式提取字符串中的最后一个单词?