我需要验证标签正则表达式。每个标签应该以标签("#")开始。有效输入:第一个月2. #simpleHashtag3. #hashtag123无效输入:1. #hashtag#2. #hashtag@hashtag我一直在尝试使用这个正则表达式/#[a-zA-z0-9]/,但它也接受无效输入。有什么建议怎么做吗?
2. #simpleHashtag
3. #hashtag123
1. #hashtag#
2. #hashtag@hashtag
/#[a-zA-z0-9]/
mpgws1up1#
目前公认的答案在以下几个方面是错误的:
尝试以下正则表达式:
/(^|\B)#(?![0-9_]+\b)([a-zA-Z0-9_]{1,30})(\b|\r)/g
它将关闭上述边缘情况,此外:
这是一个link to the demo。
o8x7eapl2#
有2个问题:
[A-z]
由于您要 * 验证 * 整个字符串,因此还需要锚(^和$)来确保完整的字符串匹配:
^
$
/^#\w+$/
参见regex demo。
这是一个额外的部分,因为很多人都希望提取(而不是验证)hashtags,所以这里有几个解决方案。记住JavaScript(和许多其他正则表达式库)中的\w等于[a-zA-Z0-9_]:
\w
[a-zA-Z0-9_]
#\w{1,30}\b
#
\B#\w{1,30}\b
\B#(?![\d_]+\b)(\w{1,30})\b
最后但并非最不重要的是,这里有一个来自https://github.com/twitter/twitter-text/tree/master/js..的***Twitter标签regex***。抱歉,太长了,无法粘贴到SO帖子中,它在这里:https://gist.github.com/stribizhev/715ee1ee2dc1439ffd464d81d22f80d1.
uubf1zoe3#
你可以试试这个:第一个月这将只包括字母、数字和下划线。
kninwzqo4#
匹配任何标签的正则表达式代码。在这种方法中,除了主符号!@#$%^&*()之外,任何字符都可以在标签中使用
(?<=(\s|^))#[^\s\!\@\#\$\%\^\&\*\(\)]+(?=(\s|$))
使用时打开“g”和“m”标志!它通过https://regex101.com和VSCode工具测试Java和JavaScript语言。它在this repo上可用。
vltsax255#
Unicode常规分类可以帮助完成这项任务:
/^#[\p{L}\p{Nd}_]+$/gu
我使用\p{L}和\p{Nd} unicode类别来匹配任何字母或十进制数字。您可以为您的正则表达式添加任何必要的类别。完整的类别列表可以在这里找到:https://unicode.org/reports/tr18/#General_Category_PropertyRegex实时演示:https://regexr.com/5tvmo
amrnrhlw6#
用于检测文本中的hashtag的有用且经过测试的正则表达式
/(^|\s)(#[a-zA-Z\d_]+)/ig
有效匹配标签的示例:#abc #ab_c#ABC #aBC
hzbexzde7#
标签正则表达式适用于任何语言第一个月
_
它是unicode正则表达式,所以如果你使用Python,你可能需要安装[regex][1]。来测试它https://regex101.com/r/NLHUQh/1
7条答案
按热度按时间mpgws1up1#
目前公认的答案在以下几个方面是错误的:
尝试以下正则表达式:
它将关闭上述边缘情况,此外:
这是一个link to the demo。
o8x7eapl2#
有2个问题:
[A-z]
allows more than just letter chars(`[, , ], ^, _, ``)由于您要 * 验证 * 整个字符串,因此还需要锚(
^
和$
)来确保完整的字符串匹配:参见regex demo。
这是一个额外的部分,因为很多人都希望提取(而不是验证)hashtags,所以这里有几个解决方案。记住JavaScript(和许多其他正则表达式库)中的
\w
等于[a-zA-Z0-9_]
:#\w{1,30}\b
-一个#
字符,后跟1到30个字字符,后跟字边界\B#\w{1,30}\b
-位于字符串开头或紧接在非单词字符之后的#
字符,然后是1到30个单词(即字母、数字或下划线)字符,后跟1到30个单词字符,后跟单词边界\B#(?![\d_]+\b)(\w{1,30})\b
-#
,位于字符串的开头或紧接在非单词字符之后,然后是1到30个单词(即字母、数字或下划线)字符(不能只是数字/下划线),后跟单词边界最后但并非最不重要的是,这里有一个来自https://github.com/twitter/twitter-text/tree/master/js..的***Twitter标签regex***。抱歉,太长了,无法粘贴到SO帖子中,它在这里:https://gist.github.com/stribizhev/715ee1ee2dc1439ffd464d81d22f80d1.
uubf1zoe3#
你可以试试这个:第一个月
这将只包括字母、数字和下划线。
kninwzqo4#
匹配任何标签的正则表达式代码。
在这种方法中,除了主符号!@#$%^&*()之外,任何字符都可以在标签中使用
用法说明
使用时打开“g”和“m”标志!
它通过https://regex101.com和VSCode工具测试Java和JavaScript语言。
它在this repo上可用。
vltsax255#
Unicode常规分类可以帮助完成这项任务:
我使用\p{L}和\p{Nd} unicode类别来匹配任何字母或十进制数字。您可以为您的正则表达式添加任何必要的类别。完整的类别列表可以在这里找到:https://unicode.org/reports/tr18/#General_Category_Property
Regex实时演示:https://regexr.com/5tvmo
amrnrhlw6#
用于检测文本中的hashtag的有用且经过测试的正则表达式
有效匹配标签的示例:#abc #ab_c#ABC #aBC
hzbexzde7#
标签正则表达式适用于任何语言
第一个月
_
的字符。_
。它是unicode正则表达式,所以如果你使用Python,你可能需要安装[regex][1]。
来测试它https://regex101.com/r/NLHUQh/1