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

时间:2015-06-26 13:02:32

标签: javascript regex

谢谢你看看。

我的目标是提出一个正则表达式,它将匹配不包含数字,空格或符号/\D/或我可能选择的任何其他符号的输入。

然而,我正在努力准确掌握正则表达式的工作原理。

我开始使用简单模式^,根据我的理解,它将匹配它可以找到的第一个非数字字符。这将匹配字符串'詹姆斯'这是正确的但也是詹姆斯1'我不想要的。

所以,我的理解是,如果我想确保在给定字符串中的任何位置找不到模式,我会使用$/^\D$/字符,如+中所示。现在因为这只会匹配一个不是数字的单个字符,我需要使用/^\D+$/来指定不应该在整个字符串中找到一个或多个数字,给我表达式\s。很棒,它不再匹配詹姆斯1'。

问题1

我的理由是否正确?

下一个要求是确保给定字符串中没有空格。 [^\s]将匹配单个空格,[^\s]将匹配第一个非空白字符。所以,根据我的理解,我只需将其添加到我已经匹配的字符串中,这些字符串不包含数字,也没有空格。同样,因为+只会匹配一个非空格字符,所以我使用/^\D+[^\s]+$/来匹配一个或多个空白字符,从而得到/^\D+[^\s]+$/的新正则表达式。

这是我迷路的地方,因为表达现在与詹姆斯1'甚至是詹姆斯史密斯25' 什么?此时非常困惑。

问题2

为什么{{1}}匹配包含空格的字符串?

问题3

我如何编写我试图解决的正则表达式?

虽然我很想解决这个问题,但我更想知道我对正则表达式的理解缺乏,所以任何解释都会有所帮助。

3 个答案:

答案 0 :(得分:3)

  1. 不完全; ^ $ 实际上是"主播" - 他们的意思是"开始"并且"结束",它实际上有点复杂,但你现在可以认为它们意味着一行的起点和终点 - 如果你&#39那么在正则表达式上查找各种修饰符;有兴趣了解更多相关信息。不幸的是, ^ 的含义过重;如果在方括号内使用它意味着"不是",这是你已经熟悉的含义。了解这两个含义之间的区别并且头脑中的定义实际上仅适用于字符范围匹配非常重要!

    进一步加剧您的困惑是 \ d 表示"数字"而 \ D 表示"不是数字"。类似地, \ s 表示"一个空格(空格/制表符/换行符等)字符"而 \ S 表示"不是空格字符。"

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

  2. 它匹配包含空格的字符串的原因是您要求" 1+非数字数字后跟 1+非太空人物" - 所以它会匹配很多字符串!我想也许你不能理解正则表达式匹配字符串的位数,你不会随意添加约束,而是建立匹配相应字符串位的匹配器。

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

    我。 [] - 匹配一系列字符

    II。 []+ - 匹配该字符范围中的一个或多个

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

    IV。 [^\d\s!@£$%^&*()+=]+ - 这里有一堆我不想让你匹配的其他角色

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

  4. 有关探索正则表达式的有用网站是http://regexr.com/3b9h7 - 我提供了我建议的解决方案作为示例。 编辑:Pruthvi Raj与debuggerx的链接非常棒!

答案 1 :(得分:2)

只需插入您想要包含在否定字符类中的每个字符,如下所示:

^[^\s\d!@£$%^&*()+=]*$

DEMO

Regular expression visualization

Debuggex Demo

^ - start of the string
[^...] - matches one character that is not in `...`
\s - matches a whitespace (space, newline,tab)
\d - matches a digit from 0 to 9
* - a quantifier that repeats immediately preceeding element by 0 or more times

所以正则表达式匹配任何具有

的字符串
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

注:

如果您不希望它的符号也包含-,连字符,请不要将其放在其他字符之间,因为它是字符类中的元字符,请将其设置为在字符类的最后

答案 2 :(得分:2)

  

我的理由是否正确?

几乎。 /\D/匹配除数字以外的任何字符,但不仅匹配第一个字符(如果使用g选项)。

  

和[^ \ s]将匹配第一个非空白字符

差不多,[^\s]将匹配任何非空白字符,而不仅仅是第一个(如果您使用g选项)。

  

/ ^ \ D + [^ \ s] + $ /匹配包含空格的字符串?

是的,确实如此,因为\D匹配一个空格(空格不是数字)。

  

为什么/ ^ \ D + [^ \ s] + $ /匹配包含空格的字符串?

因为\D+中的/^\D+[^\s]+$/可以匹配空格。

<强>结论

使用

^[^\d\s!@£$%^&*()+=]+$

It will match strings that have no digits and spaces, and the symbols you do not allow

介意要将文字-][与字符类匹配,您需要转义它们,或者在开始时使用或结束表达。为了安全起见,逃避它们。