下面的正则表达式在chrome上工作,但在safari中有一个问题,因为它包含一个向后看,这里需要向前看的正确工作,所以有没有其他方法可以解决?
(#[a-zA-Z0-9_(,)]{1,30})+(?<!,)$
我尝试完成的正则表达式是:
- 如果它应该以# 开头
- 字符串之间用逗号分隔
- 字符串不能以"逗号"结尾
- 在"逗号"之后,如果输入一个新字符串,则散列应该开始
- 每个字符串的最大限制为30,最小限制为1
它应该接受:
#tag
#tag_1,#tag2
#tag1,#tag2,#tag3
它不应该接受:-
#
#tag(with more than 30 characters)
# tag1,
#tag:///
可以去掉字符类的逗号,并在每次迭代前加上它
如果只需要匹配,捕获组可以是非捕获组。
^#[a-zA-Z0-9_()]{1,30}(?:,#[a-zA-Z0-9_()]{1,30})*$
模式匹配:
^
字符串 起始#[a-zA-Z0-9_()]{1,30}
匹配1-30次字符类,不含逗号(?:,#[a-zA-Z0-9_()]{1,30})*
可选地重复,
和1-30次字符类,不带逗号$
字符串结束
Regex演示