gpt4 book ai didi

javascript - JSHint "Bad or unnecessary escaping."双斜线开头/结尾重要吗?

转载 作者:行者123 更新时间:2023-12-04 18:07:34 24 4
gpt4 key购买 nike

我将一些正则表达式作为字符串存储在对象中,但收到上述错误消息。

我相信这是因为它们没有以/为前缀或以/为后缀 - 因为我将它们运行到一个新的 RegExp() 构造函数中,因为脚本允许用户定义 RegExp,所以我希望它们都是动态的。

var patterns = {
email: '^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$',
url: '[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)',
number: '^[-+]?[0-9]*\.?[0-9]+$',
empty: '^\\s*$'
};

有上面的字符串。

要修复它们,我可以这样做和//它们:
var patterns = {
email: '/^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/',
url: '/[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/',
number: '/^[-+]?[0-9]*\.?[0-9]+$',
empty: '/^\\s*$/'
};

但是当通过 new RegExp() 调用时他们肯定会这样做(例如):
var reg = new RegExp(patterns.empty);
/**
* reg = //^\\s*$//
*/

带双斜线。作为一个 RegExp 初学者,我的问题是,这些双斜线重要吗?能不能用别的方法修。 JSHint 提示是因为它不是“真正的”正则表达式。

我也可以将它们从字符串中删除并存储为真正的正则表达式,但我再次需要它们是动态的。任何帮助表示赞赏。

最佳答案

问题是反斜杠字符( \ )既用于转义字符串文字中的特殊字符(例如 \n 被解释为单个换行符,而 \\ 被解释为单个反斜杠字符),它用于转义正则表达式中的特殊字符。

因此,当字符串文字用于正则表达式时,您需要正则表达式才能看到 \ ,您需要转义反斜杠并包含 \\在字符串文字中。具体来说,在 email你需要\\.而不是 \. .例如。

email: '^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$'

或者,您可以将正则表达式放入 /.../而不是 '...' (或 '/.../' )。然后字符串文字转义不适用,并且您不需要加倍斜杠。例如。
email: /^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/

在后一种情况下,您也不需要 new RegExp(patterns.email) , 自 patterns.email已经是一个 RegExp 对象。

关于javascript - JSHint "Bad or unnecessary escaping."双斜线开头/结尾重要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23230440/

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