gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 07:26:15 26 4
gpt4 key购买 nike

感谢观看。

我的目标是提出一个正则表达式,它将匹配不包含数字、空格或符号 !@£$%^&*()+= 或任何其他符号的输入选择。

然而,我很难准确掌握正则表达式的工作原理。

我从简单的模式 /\D/ 开始,据我了解,它将匹配它可以找到的第一个非数字字符。这将匹配正确的字符串“James”,但也匹配我不想要的“James1”。

所以,我的理解是,如果我想确保在给定字符串的任何地方都找不到模式,我使用 ^$ 字符,如/^\D$/。现在因为这只会匹配一个不是数字的字符,所以我需要使用 + 来指定不应在整个字符串中找到 1 个或多个数字,给我表达式 /^\D+$/.太棒了,它不再匹配“James1”。

问题 1

到目前为止我的推理是否正确?

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

这是我迷路的地方,因为表达式现在匹配“James1”甚至“James Smith25”。 什么?在这一点上非常困惑。

问题 2

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

问题 3

我将如何编写我要解决的正则表达式?

虽然我热衷于解决问题,但我更感兴趣的是找出我对正则表达式的理解不足的地方,因此任何解释都会有所帮助。

最佳答案

  1. 不完全; ^$ 实际上是“ anchor ”——它们的意思是“开始”和“结束”,实际上有点复杂,但您可以认为它们表示开始和现在行尾 - 如果您有兴趣了解更多相关信息,请查看正则表达式上的各种修饰符。不幸的是 ^ 有一个重载的含义;如果在方括号内使用,则表示“不”,这是您已经熟悉的含义。理解这两种含义之间的区别以及您脑海中的定义实际上仅适用于字符范围匹配非常重要!

    进一步使您感到困惑的是 \d 表示“数字”,而 \D 表示“不是数字”。类似地,\s 表示“空格(空格/制表符/换行符/等)字符”,\S 表示“不是空格字符”。

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

  2. 它匹配包含空格的字符串的原因是您要求“1+ 非数字后跟 1+ 非空格字符” - 所以它会匹配很多字符串!我认为您可能不了解正则表达式匹配字符串位,您不是在添加约束,而是构建匹配器的机器人来匹配相应字符串的位。

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

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

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

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

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

    v. ^[^\d\s!@£$%^&*()+=]+$ - 现在应用了 anchor ,所以这个匹配器必须应用到整行,否则它不能匹配

探索正则表达式的有用网站是http://regexr.com/3b9h7 - 我以我建议的解决方案为例。 编辑:Pruthvi Raj 的 debuggerx 链接很棒!

关于不匹配数字、空格和选定符号的 JavaScript 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31073893/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com