如何编写正则表达式从字符串中提取符合@[1-99]格式的子串?
正则匹配方案解答
你原有正则\B@([1-9]|[1-9][0-9])\b的核心问题是\B仅限制@前不能是单词字符,但是允许#、$这类非单词非空白字符出现在@前方,因此会误匹配#$@22这类不符合要求的内容。
最终可用正则
(?<=^|\s)@[1-9]\d?\b
匹配规则说明:
(?<=^|\s):零宽正向后行断言,强制要求@的前侧只能是字符串开头或者空白字符,直接过滤掉前缀为字母、特殊符号的非法情况@:匹配固定的@标识[1-9]\d?:匹配199范围的正整数:第一位为19,第二位可选0~9,天然排除@0、@09这类不符合要求的格式\b:单词边界限定,避免匹配到@123中截断的@12这类内容
低版本兼容写法
如果你的运行环境不支持可变长度的后行断言(比如部分旧版本的JavaScript引擎),可以改用捕获组方案,提取第二个分组内容即可:(^|\s)(@[1-9]\d?)\b
匹配完成后取索引为2的捕获组,就能得到符合要求的子串。
内容的提问来源于stack exchange,提问作者Friska Sianturi
相关产品推荐
相关产品推荐

