在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®#:12243235435 beatae vitae dicta MLS Number#:12243235435 sunt 3543654654675645654654 解释。
鉴于上面的字符串,我如何在字符串中提取“(MLS® R2608327)”或“MLS®#:12243235435”或“MLS Number#:12243235435”?它的值可能会改变,因为这是动态的。因此,其他实例可能是“135435”。位置/顺序也可能发生变化,可能在中间或最后部分。
这个正则表达式
^ ((MLS|mls|MLS|MLS®|mls®|Mls®|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(?:®|®?(?: Number)?)[^A-Za-z0-9]*)([^?*\/\\:;<> ]1,23\d2,23[^?*\/\\:;<> ]1,23)
部分模式匹配:
\b
防止部分匹配的单词边界
(
捕获第 1 组
MLS
字面匹配
(?:
非捕获组
&reg
字面匹配
|
或者
®?(?: Number)?
匹配可选 ® 和可选 Number
)
关闭非捕获组
[^A-Za-z0-9]*
匹配列表以外的可选字符
)
关闭第一组
(
捕获第 2 组
[^?*\/\\:;<> ]1,23
匹配除所列字符之外的任何字符的 1-23 次重复
\d2,23
匹配 2 个 -23 位
[^?*\/\\:;<> ]1,23
匹配除所列字符以外的任何字符的 1-23 次重复
)
关闭第二组
Regex demo
【讨论】:
以上是关于在js中使用正则表达式从字符串中提取单词的主要内容,如果未能解决你的问题,请参考以下文章