我有一个很长的正则表达式,我希望在我的 JavaScript 代码中将其拆分为多行,以根据 JSLint 规则保持每行长度为 80 个字符。我认为它更适合阅读。这是模式示例:
var pattern = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
[ 编辑 2022/08 ] 创建了一个小型github 存储库来创建带有空格、注释和模板的正则表达式。
您可以将其转换为字符串并通过调用创建表达式new RegExp():
new RegExp()
var myRE = new RegExp (['^(([^<>()[\]\\.,;:\\s@\"]+(\\.[^<>(),[\]\\.,;:\\s@\"]+)*)', '|(\\".+\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.', '[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\\.)+', '[a-zA-Z]{2,}))$'].join(''));
笔记:
将 表达式文字 转换为字符串时,您需要转义所有反斜杠,因为在评估 字符串文字 时会消耗反斜杠。(有关更多详细信息,请参阅 Kayo 的评论。)
RegExp接受修饰符作为第二个参数
RegExp
/regex/g=>new RegExp('regex', 'g')
/regex/g
new RegExp('regex', 'g')
[ 添加ES20xx (标记模板)]
在 ES20xx 中,您可以使用标记模板。见片段。
这里的缺点是您不能在正则表达式字符串中使用纯空格(始终使用\s, \s+, \s{1,x},\t等\n)。
\s
\s+
\s{1,x}
\t
\n
(() => { const createRegExp = (str, opts) => new RegExp(str.raw[0].replace(/\s/gm, “”), opts || “”); const yourRE = createRegExp^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)| (\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])| (([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$; console.log(yourRE); const anotherLongRE = createRegExp(\byyyy\b)|(\bm\b)|(\bd\b)|(\bh\b)|(\bmi\b)|(\bs\b)|(\bms\b)| (\bwd\b)|(\bmm\b)|(\bdd\b)|(\bhh\b)|(\bMI\b)|(\bS\b)|(\bMS\b)| (\bM\b)|(\bMM\b)|(\bdow\b)|(\bDOW\b) ${"gi"}; console.log(anotherLongRE); })();
^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)| (\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])| (([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$
(\byyyy\b)|(\bm\b)|(\bd\b)|(\bh\b)|(\bmi\b)|(\bs\b)|(\bms\b)| (\bwd\b)|(\bmm\b)|(\bdd\b)|(\bhh\b)|(\bMI\b)|(\bS\b)|(\bMS\b)| (\bM\b)|(\bMM\b)|(\bdow\b)|(\bDOW\b) ${"gi"}