我有当前的正则表达式:
/(?<=[\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;
干杯。
答案 0 :(得分:13)
以下内容如何:
\B(\#[a-zA-Z]+\b)(?!;)
答案 1 :(得分:4)
你可以使用负向前瞻reegex:
/(?<=[\s>]|^)#(\w*[A-Za-z_]+\w*)\b(?!;)/
\b
- 字边界确保我们处于单词结尾(?!;)
- 断言我们下一个位置没有分号答案 2 :(得分:1)
答案 3 :(得分:1)
/(#(?:[^\x00-\x7F]|\w)+)/g
以#开头,然后至少一个(+)ANCII符号([^ \ x00- \ x7F],范围不包括非ANCII符号)或单词符号(\ w)。
这应该涵盖包括“#їжак”之类的ANCII符号的情况。
答案 4 :(得分:0)
这是最佳做法。
(#+[a-zA-Z0-9(_)]{1,})
答案 5 :(得分:0)
你可以试试这个模式:/#\S+/
它将包含 #
之后的所有字符,但空格除外。
答案 6 :(得分:0)
(?<=(\s|^))#[^\s\!\@\#\$\%\^\&\*\(\)]+(?=(\s|$))
匹配任何主题标签的正则表达式代码。
在这种方法中,除了主符号 !@#$%^&*()
外,任何字符都可以在主题标签中接受
使用说明
使用时打开“g”和“m”标志!
它通过 https://regex101.com 和 VSCode 工具针对 Java 和 JavaScript 语言进行了测试。
它在 this repo 可用。