Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript正则表达式不匹配数字、空格和选定符号_Javascript_Regex - Fatal编程技术网

JavaScript正则表达式不匹配数字、空格和选定符号

JavaScript正则表达式不匹配数字、空格和选定符号,javascript,regex,Javascript,Regex,谢谢你看 我的目标是找到一个regexp,它将匹配不包含数字、空格或符号的输入@英镑$%^&*()+=或我可以选择的任何其他符号 然而,我很难准确地理解正则表达式是如何工作的 我从简单的模式/\D/开始,根据我的理解,它将匹配它能找到的第一个非数字字符。这将匹配字符串“James”,这是正确的,但也匹配我不想要的“James1” 因此,我的理解是,如果我想确保在给定字符串中的任何位置都找不到模式,我将使用^和$字符,如/^\D$/中的字符。现在,因为这将只匹配非数字的单个字符,所以我需要使用+来

谢谢你看

我的目标是找到一个regexp,它将匹配不包含数字、空格或符号的输入
@英镑$%^&*()+=
或我可以选择的任何其他符号

然而,我很难准确地理解正则表达式是如何工作的

我从简单的模式
/\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表示“数字”和\d表示“非数字”。类似地,\s表示“空白字符(空格/制表符/换行符/等)”,\s表示“非空白字符”

    值得注意的是,\d实际上是[0-9]的快捷方式(请注意,-在方括号内有特殊含义),\d[^0-9]的快捷方式

  • 它匹配包含空格的字符串的原因是您要求“1+非数字数字后跟1+非空格字符”-所以它会匹配很多字符串!我想也许你不理解正则表达式匹配字符串的位,你不是在添加约束,而是在构建匹配器机器人,匹配相应字符串的位

  • /^[^\d\s!@$%^&*()+=]+$/
    是您正在寻找的答案-我会这样看:

    i、
    []
    -匹配一系列字符

    ii.
    []+
    -匹配该范围内的一个或多个字符

    iii.
    [^\d\s]+
    -匹配一个或多个不匹配的字符\d(数字)或\s(空白)

    iv.
    [^\d\s!@$%^&*()+=]+
    -这里有一些其他字符我不希望您匹配

    v、
    ^[^\d\s!@$%^&*()+=]+$
    -现在应用了锚定,因此此匹配器必须应用于整行,否则它将无法匹配

  • 探索regexs的有用网站是-whic
    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!@£$%^&*()+=]+$