当前位置: 首页 > 面试题库 >

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

皇甫繁
2023-03-14
问题内容

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

问题答案:

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

})();


 类似资料:
  • 问题内容: 这实际上可行吗?我有一些很长的正则表达式模式规则,这些规则很难理解,因为它们无法一次放入屏幕。例: 反斜杠或三重引号将不起作用。 编辑。我结束使用VERBOSE模式。现在是正则表达式模式的外观: 问题答案: 您可以通过引用每个段来分割正则表达式模式。无需反斜杠。 您还可以使用原始字符串标志,并且必须将其放在每个段之前。 参见文档。

  • 我看到这个正则表达式把a.b .替换成了a。b `?我不明白它是针对Python而不是Javascript的,或者它没有得到很好的解释。 我知道如何用 我看不到要获取什么正则表达式

  • 问题内容: 我目前正在将Web应用程序代码从PHP移植到JS。 我对此正则表达式有疑问。从PHP 这样使用 如何将其转换为在JS上工作? 先感谢您 问题答案: 没什么特别的。PHP regex语法与JavaScript中的语法非常相似: 您可以从 MDN的 本手册中找到有关JavaScript 中正 则表达式的更多信息:https : //developer.mozilla.org/en- US/

  • 问题内容: 我想解决这个问题。 逗号:分割条款 双引号:字符串值(忽略特殊字符) 数组 例如: 输入: 预期输出: 但是我无法获得超越结果。 我写了下面的代码: 我的输出是: 我需要更改以获得预期的输出?我应该坚持使用正则表达式还是其他解决方案更灵活,更易于维护? 问题答案: 这个正则表达式可以达到目的: 它的工作原理是在逗号后添加一个用于匹配成对的方括号的预读-如果您 位于 方括号内,那么您当然

  • 使用JavaScript,我试图使用正则表达式将段落拆分为句子。我的正则表达式不考虑括号内的句子,我希望保留分隔符。 我在这里放了一个代码示例 jsFiddle.net

  • 问题内容: var ss= “ ddd”; var arr= ss.match( /<pre.*?<\/pre>/gm ); alert(arr); // null 我希望可以拾取PRE块,即使它跨越换行符也是如此。我以为’m’标志可以做到。才不是。 所以解决方案是: 有谁不那么神秘吗? 编辑:这是重复的,但是由于它比我的更难找到,因此我不会删除。 它建议作为“多行点”。我仍然不明白的是为什么不起