我有当前的正则表达式:
/(?<=[\s>]|^)#(\w*[A-Za-z_]+\w*)/g
我正在测试字符串:
Here's a #hashtag and here is #not_a_tag; which should be different. Also testing: Mid#hash. #123 #!@£ and <p>#hash</p>
出于我的目的,在该字符串中应该只检测到两个主题标签。我想知道如何更改表达式,使其与我的示例中以;
结尾的标签不匹配这是#not_a_tag;
干杯。
以下内容如何:
\B(\#[a-zA-Z]+\b)(?!;)
你可以使用负向前瞻性正则表达式:
/(?<=[\s>]|^)#(\w*[A-Za-z_]+\w*)\b(?!;)/
\b
- 词边界确保我们在词的末尾(?!;)
- 断言我们下一个位置没有分号类似于anubhava的答案,但将\w*
的2个实例与\d*
交换为\w
和[A-Za-z_]
之间的唯一区别是0-9
字符
这具有将步数从588减少到90的效果
(?<=[\s>])#(\d*[A-Za-z_]+\d*)\b(?!;)