gpt4 book ai didi

javascript - 正则表达式没有按预期工作?

转载 作者:行者123 更新时间:2023-11-29 09:54:19 25 4
gpt4 key购买 nike

我有这个正则表达式:

new RegExp("^[a-z 0-9\"\-\`]+$", "ig")

我正在测试一个不应该工作的字符串:'#vc'

但它确实通过了测试:(而且它不应该 (#))

new RegExp("^[a-z 0-9\"\-\`]+$", "ig").test('#vc') //true

但是如果我删除 \"\-\`,它确实有效(并且测试失败,因为它应该)。

我做错了什么?

我的正则表达式只搜索英文、数字、空格、["]、[-][ 和 [`]

最佳答案

如果你使用 RegExp 构造函数,你需要加倍转义,因为有两层转义:JavaScript 字符串文字转义和正则表达式语法转义.

但是,在您的情况下,可以编写一个完全不转义的正则表达式。

在你的情况下,你可以只使用literal RegExp,你只需要关心正则表达式语法中的转义,以及任何/<的转义 出现在正则表达式中(因为 / 用作文字 RegExp 的分隔符:

/^[a-z 0-9"\-`]+$/gi

另一种方式是:

/^[a-z 0-9"`-]+$/gi

如果破折号 - 是字符类中的最后一个,则无需转义破折号。这样,您就无需将自己与所有转义混淆。

或者,如果您仍想使用 RegExp 构造函数,则需要加倍转义以在字符串中指定 \:

new RegExp('^[a-z 0-9"\\-`]+$', "ig")

或者只使用在字符类最后指定 - 的其他版本:

new RegExp('^[a-z 0-9"`-]+$', "ig")

请注意,我将字符串引号从 " 更改为 ' 以避免必须转义字符串中的 "。如果出于某种原因您更喜欢 ",请在文字字符串级别转义 ":

new RegExp("^[a-z 0-9\"`-]+$", "ig")

至于你当前的正则表达式

new RegExp("^[a-z 0-9\"\-\`]+$", "ig")

相当于

/^[a-z 0-9"-`]+$/gi

如你所见,包含了从"`的字符范围,这意味着ASCII码从0x22到0x60的所有字符都是包括在内,并且 # 恰好在范围内。

要检查模式是否是您想要的,您可以随时调用正则表达式的 source 属性来获取正则表达式的源字符串。

关于javascript - 正则表达式没有按预期工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15496628/

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