Javascript 不包含连续字符的正则表达式
我想不出javascript正则表达式可以满足所有这些要求: 字符串只能包含下划线和字母数字字符。 它必须以字母开头,不包括空格,不以下划线结尾,并且不包含两个连续的下划线。 这就是我所说的,但“不包含连续下划线”部分是最难添加的Javascript 不包含连续字符的正则表达式,javascript,regex,Javascript,Regex,我想不出javascript正则表达式可以满足所有这些要求: 字符串只能包含下划线和字母数字字符。 它必须以字母开头,不包括空格,不以下划线结尾,并且不包含两个连续的下划线。 这就是我所说的,但“不包含连续下划线”部分是最难添加的 ^[a-zA-Z][a-zA-Z0-9_]+[a-zA-Z0-9]$ 您可以使用多个lookahead(本例中为负数): 看。 分解如下: ^ # start of the line (?!.*__) # neg. lookahead,
^[a-zA-Z][a-zA-Z0-9_]+[a-zA-Z0-9]$
您可以使用多个lookahead(本例中为负数): 看。
分解如下:
^ # start of the line
(?!.*__) # neg. lookahead, no two consecutive underscores (edit 5/31/20: removed extra Kleene star)
(?!.*_$) # not an underscore right at the end
[A-Za-z]\w* # letter, followed by 0+ alphanumeric characters
$ # the end
作为
JavaScript
代码片段:
let strings=['somestring','u not_this_one','this one','not this_one','but this_one','this_one'u not','this_one'u yes']
变量re=/^(?。*。。*。(?!*。$)[A-Za-z]\w*$/;
forEach(函数(字符串){
console.log(重新测试(字符串));
});代码>您也可以使用
^[a-zA-Z]([a-zA-Z0-9]|(_(?!_)))+[a-zA-Z0-9]$
与正则表达式相比,唯一的变化是将[a-zA-Z0-9.]
更改为[a-zA-Z0-9]|((?))
。我从字符集中删除了下划线,并允许它出现在备选字符集的第二部分,如果它后面没有另一个下划线的话
(?!\u)
是负向前看,意味着\u
不能是下一个字符
^
将位置断言为行的起点
[a-z]
匹配任何小写ASCII字母。下面的代码添加了i
(不区分大小写)标志,因此这也与大写变量匹配
(?!\w*\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
(?:\w*[^\w)]?
可以选择匹配以下内容
\w*
匹配任意数量的单词字符
[^\W\u]
匹配除\u
之外的任何单词字符。解释:匹配任何不是单词字符,但不是\uuu
的字符(因为它在否定集中)
$
在行尾断言位置
设a=['somestring','u not'u this'u one','this one','not this'u','but'u this'u one','this'u one'u not','this'u one'u yes']
变量r=/^[a-z](?!\w*\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
a、 forEach(函数){
if(r.test(s))console.log(s)
});
请告诉我这不是密码格式要求。也许,您可以将其写成/^[a-Z](?!..\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。一个错误提示:“this_One__yes”不适用于a
或b
或ab
,请参阅(意思是字符串必须至少有3个字符长,不知道这是否是要求)。
^[a-zA-Z]([a-zA-Z0-9]|(_(?!_)))+[a-zA-Z0-9]$
^[a-z](?!\w*__)(?:\w*[^\W_])?$