小编典典

如何在 JavaScript 中将长正则表达式拆分为多行?

all

我有一个很长的正则表达式,我希望在我的 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,}))$/;

阅读 82

收藏
2022-09-02

共1个答案

小编典典

[ 编辑 2022/08 ] 创建了一个小型github
存储库
来创建带有空格、注释和模板的正则表达式。


您可以将其转换为字符串并通过调用创建表达式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(''));

笔记:

  1. 表达式文字 转换为字符串时,您需要转义所有反斜杠,因为在评估 字符串文字 时会消耗反斜杠。(有关更多详细信息,请参阅 Kayo 的评论。)

  2. RegExp接受修饰符作为第二个参数

/regex/g=>new RegExp('regex', 'g')

[ 添加ES20xx (标记模板)]

在 ES20xx 中,您可以使用标记模板。见片段。

笔记:

  • 这里的缺点是您不能在正则表达式字符串中使用纯空格(始终使用\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);
    })();

2022-09-02