求正确正则表达式匹配指定@、#开头的目标文本
问题描述
待处理HTML文本:
<p>sadadsadsad @Jack </p> <p>@John Rich & Sarah </p><p>sadadsadsadsadsadasd @Junior Cam AND Ken </p> <p> <br></p><p>asdsadasdasdasd #12345-S Company asdsadasdasd @Tom Mer AND Grace </p><p>asdadsadasd @Milo Elisa </p>
需要提取的目标内容:
- @Jack
- @John Rich & Sarah
- @Junior Cam AND Ken
- #12345-S Company
- @Milo Elisa
- @Tom Mer AND Grace
我用的正则 /([@|#|!].+ )/gm 没法正确匹配这些内容,求正确的正则表达式?
正确正则表达式及说明
你之前的正则踩了两个坑:一是.+属于贪婪匹配,会把多个目标内容连在一起匹配;二是没限定准确的结束边界。
推荐使用这个正则:
/([@#][^&]+)(?= )/gm
规则解释:
[@#]:匹配开头的@或#,如果需要匹配!开头的内容,改成[@#!]即可[^&]+:匹配除&之外的所有字符——因为目标内容的结束标志是 ,遇到&就停止匹配,避免贪婪过度(?= ):正向预查,仅确认目标内容后跟着 ,但不会将这个实体包含到匹配结果里
用这个正则可以精准提取你列出的所有目标内容,不会出现匹配错误的情况。
内容的提问来源于stack exchange,提问作者felix
相关产品推荐
相关产品推荐

