JavaScript正则表达式不匹配数字、空格和选定符号
谢谢你看 我的目标是找到一个regexp,它将匹配不包含数字、空格或符号的输入JavaScript正则表达式不匹配数字、空格和选定符号,javascript,regex,Javascript,Regex,谢谢你看 我的目标是找到一个regexp,它将匹配不包含数字、空格或符号的输入@英镑$%^&*()+=或我可以选择的任何其他符号 然而,我很难准确地理解正则表达式是如何工作的 我从简单的模式/\D/开始,根据我的理解,它将匹配它能找到的第一个非数字字符。这将匹配字符串“James”,这是正确的,但也匹配我不想要的“James1” 因此,我的理解是,如果我想确保在给定字符串中的任何位置都找不到模式,我将使用^和$字符,如/^\D$/中的字符。现在,因为这将只匹配非数字的单个字符,所以我需要使用+来
@英镑$%^&*()+=
或我可以选择的任何其他符号
然而,我很难准确地理解正则表达式是如何工作的
我从简单的模式/\D/
开始,根据我的理解,它将匹配它能找到的第一个非数字字符。这将匹配字符串“James”,这是正确的,但也匹配我不想要的“James1”
因此,我的理解是,如果我想确保在给定字符串中的任何位置都找不到模式,我将使用^
和$
字符,如/^\D$/
中的字符。现在,因为这将只匹配非数字的单个字符,所以我需要使用+
来指定不应在整个字符串中找到1个或多个数字,从而得到表达式/^\D+$/
。太棒了,它不再匹配“James1”
问题1
到目前为止,我的推理正确吗
下一个要求是确保给定字符串中没有空格\s
将匹配单个空白字符,[^\s]
将匹配第一个非空白字符。所以,根据我的理解,我只需要将它添加到我已有的内容中,以匹配不包含数字和空格的字符串。同样,由于[^\s]
将只匹配一个非空白字符,因此我使用+
匹配一个或多个空白字符,给出了新的正则表达式/^\D+[^\s]+$/
这就是我迷路的地方,因为这个短语现在与“James1”甚至“jamesSmith25”匹配。什么?在这一点上我感到非常困惑
问题2
为什么/^\D+[^\s]+$/
匹配包含空格的字符串
问题3
我将如何编写我试图解决的正则表达式
虽然我热衷于解决这个问题,但我更感兴趣的是找出我对正则表达式理解的不足之处,因此任何解释都会有所帮助。只需插入不希望包含在否定字符类中的每个字符,如下所示:
^[^\s\d!@£$%^&*()+=]*$
因此正则表达式匹配任何具有
1. string that has a beginning
2. containing 0 or more number of characters that is not whitesapce, digit, and all the symbols included in the character class ( In this example !@£$%^&*()+=) i.e., characters that are not included in the character class `[...]`
3.that has ending
注:
如果您不希望它包含的符号还包括-
,一个连字符,不要将它放在其他字符之间,因为它是字符类中的元字符,请将它放在字符类的最后
到目前为止,我的推理正确吗
差不多/\D/
匹配除数字以外的任何字符,但不只是第一个字符(如果使用g
选项)
和[^\s]将匹配第一个非空白字符
几乎,[^\s]
将匹配任何非空白字符,而不仅仅是第一个字符(如果使用g
选项)
/^\D+[^\s]+$/是否匹配包含空格的字符串
是的,因为\D
匹配一个空格(空格不是数字)
为什么/^\D+[^\s]+$/与包含空格的字符串匹配
因为/^\D+[^\s]+$/
中的\D+
可以匹配空格
结论:
使用
注意要将文字-
、]
或[
与字符类匹配,您需要将其转义,或在表达式的开头或结尾使用。为了安全起见,请转义它们
/^[^\d\s!@$%^&*()+=]+$/
是您正在寻找的答案-我会这样看:
i、 []
-匹配一系列字符
ii.[]+
-匹配该范围内的一个或多个字符
iii.[^\d\s]+
-匹配一个或多个不匹配的字符\d(数字)或\s(空白)
iv.[^\d\s!@$%^&*()+=]+
-这里有一些其他字符我不希望您匹配
v、 ^[^\d\s!@$%^&*()+=]+$
-现在应用了锚定,因此此匹配器必须应用于整行,否则它将无法匹配1. string that has a beginning
2. containing 0 or more number of characters that is not whitesapce, digit, and all the symbols included in the character class ( In this example !@£$%^&*()+=) i.e., characters that are not included in the character class `[...]`
3.that has ending
^[^\d\s!@£$%^&*()+=]+$