一尘不染

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

javascript

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

阅读 334

收藏
2020-05-01

共1个答案

一尘不染

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

注意:

  • 这里缺点是,你不能在正则表达式字符串使用纯空格(经常使用\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);

})();
2020-05-01