代码之家  ›  专栏  ›  技术社区  ›  DR01D

包含重复模式的正则表达式可以用速记法或其他技术来简化吗?

  •  -1
  • DR01D  · 技术社区  · 8 年前

    背景) 下面的正则表达式模式看起来很长,但大部分由重复模式组成。

    该范围使用3次,

    [a-zA-Z0-9&+".;!'|?(),~[{}<>_:`*#\/\-\^\]\\]   
    

    var repeatingPattern = /^[a-zA-Z0-9&+".;!'|?(),~[{}<>_:`*#\/\-\^\]\\](( [a-zA-Z0-9&+".;!'|?(),~[{}<>_:`*#\/\-\^\]\\])|([a-zA-Z0-9&+".;!'|?(),~[{}<>_:`*#\/\-\^\]\\]))/

    此正则表达式的英文翻译为:

    1. 第一个字符必须在范围内。
    2. 第二个字符必须是空格,后跟范围内的字符。
    3. 或者第二个字符必须是范围内的字符。

    问题) 我写了很多遍这个范围,有没有一种方法可以用速记或其他一些技巧?

    2 回复  |  直到 8 年前
        1
  •  3
  •   ajm    8 年前

    RegExp

    const pattern = '[a-zA-Z0-9&+".;!\'|?(),~[{}<>_:`*#\/\-\^\]\\]';
    const regex = new RegExp(`^${pattern}((${pattern})|(${pattern})`);
    

        2
  •  2
  •   The fourth bird    8 年前

    quantifier {2}

    ^ $

    ^[a-zA-Z0-9&+".;!'|?(),~[{}_:`*#\/\-\^\]\\](?: [a-zA-Z0-9&+".;!'|?(),~[{}_:`*#\/\-\^\]\\]){2}$
    

    Regex demo

    var repeatingPattern = /^[a-zA-Z0-9&+".;!'|?(),~[{}<>_:`*#\/\-\^\]\\](?: [a-zA-Z0-9&+".;!'|?(),~[{}<>_:`*#\/\-\^\]\\]){2}$/;
    var strings = [
      'a { #',
      'a { # %',
      '#'
    ];
    strings.forEach((s) => {
      console.log(s + " ==> " + repeatingPattern.test(s));
    });

    ?

    ()

    ^[a-zA-Z0-9&+".;!'|?(),~[{}_:`*#\/\-\^\]\\]( ?[a-zA-Z0-9&+".;!'|?(),~[{}_:`*#\/\-\^\]\\])$`
    

    Regex demo

    var repeatingPattern = /^[a-zA-Z0-9&+".;!'|?(),~[{}<>_:`*#\/\-\^\]\\]( ?[a-zA-Z0-9&+".;!'|?(),~[{}<>_:`*#\/\-\^\]\\])$/;
    var strings = [
      'a #',
      'a { #',
      'a { # %',
      '#'
    ];
    strings.forEach((s) => {
      console.log(s + " ==> " + repeatingPattern.test(s));
    });