Javascript 正则表达式中的非组

Javascript 正则表达式中的非组,javascript,regex,Javascript,Regex,所以我知道[^A-Za-z]会匹配任何非字母的字符 有没有办法和一个团队一起做这件事?例如:(?^:&;)-将匹配非序列的任何字符序列 注意:如前所述,匹配空字符串是没有意义的,因为空字符串是不是序列的字符序列,所以我希望正则表达式匹配尽可能多的字符 例如: 在Ben&;Jerry's匹配项将是Ben和Jerry's(注意Ben之后和Jerry's之前的空格也会被捕获 注意:如果可能,请不要使用look behinds,因为我将在JS脚本中使用正则表达式,Javascript不支持l

所以我知道
[^A-Za-z]
会匹配任何非字母的字符

有没有办法和一个团队一起做这件事?例如:
(?^:&;)
-将匹配非序列的任何字符序列

注意:如前所述,匹配空字符串是没有意义的,因为空字符串是不是序列的字符序列,所以我希望正则表达式匹配尽可能多的字符

例如:

Ben&;Jerry's
匹配项将是
Ben
Jerry's
(注意
Ben
之后和
Jerry's
之前的空格也会被捕获

注意:如果可能,请不要使用look behinds,因为我将在JS脚本中使用正则表达式,Javascript不支持look behinds。

简单:

(.*?)(?:&)|((?!&).*)$

说明:
  • (.*)
    :拿走一切,但不要贪婪
  • (?:&;)
    ?:
    是非捕获组。您不想获取该值的组
  • ((?!&;).*)$
    :获取字符串的剩余部分,该字符串不是
    &;

  • 您需要的是一个与备选方案匹配的正则表达式,它只将最后一个备选方案捕获到组1中,该备选方案将呈现一个(或一个展开的版本,以获得更好的性能-如果您只有2个或3个):

    见(a)

    模式:

    • &;
      -匹配
      实体
    • |
      -或
    • ((?:(?!&;)[\s\s])+
      -匹配并捕获组1中不是
      序列起点的任何文本块(1+字符)。因为它是用于JS的,所以需要
      [\s]
      (或
      [^]
      )来匹配任何字符,包括换行符。否则,请改用
      (如果您只想匹配线)
    var re=/&;|((?:(?!&;)[\s\s])+)/g;
    var str='abc Ben&;Jerry's foobar sss&;\n\n\nsSSS&;sss&;\n\nsSSS&;sss&;sss&;sss\n&;';
    var-res=[];
    while((m=re.exec(str))!==null){
    如果(m.index==re.lastIndex){//只对
    re.lastIndex++;//展开的模式(因为它可以匹配空字符串)
    }
    res.push(m[1]);//仅收集捕获的文本
    }
    document.body.innerHTML=“BEFORE:
    ”+str.replace(/&/g,&;)+”;
    document.body.innerHTML+=“之后:
    ”+res.join(“”+“”)
    @anubhava修复了它。很抱歉,我弄错了。用
    &;
    分割输入会容易得多。不幸的是,虽然分割看起来很简单,但在我的脚本中,它会使它更复杂。我的脚本的目标是防弹正则表达式,其中要匹配的字符串将不包含任何
    &
    ,而是继续ly
    &;
    s,在这一点之后有点复杂,但拆分不会奏效。@anubhava我需要一个解决方案来修复正则表达式,而不是脚本求反对于一般正则表达式来说是很棘手的。毕竟,空字符串是“一个不是
    &;
    的字符序列”。我想你想要的是“尽可能多的字符序列,不包括
    &;
    "。如果没有字符,只有空格,空格将不匹配…但是非常好的解决方案。谢谢。你为什么需要空格。如果你喜欢答案,你能接受吗?而且…
    Ben&;Jerry的
    不匹配。我还不能接受。解决方案对我的scr来说不够好ipt。我需要它更防弹。而且它不会匹配
    Ben&;Jerry的foobar
    中的
    foobar
    改进了我的答案!是的!我为自己感到骄傲。有一个更简单的解决方案。请接受真正好的解决方案。我同意。只有一个问题,在我的脚本中不重要,但在其他人中可能重要:它将匹配
    &;
    这样,如果字符串仅为“&;”,则使用重新测试(str)将得到true。它将被匹配但不会被捕获,因此仍然能够区分
    &
    和非
    &
    &|((?:(?!&)[\s\S])+)