正则表达式不匹配所有模式

时间:2016-04-08 10:55:17

标签: javascript regex

我有一个匹配简单正则表达式的正则表达式模式,这可以捕获文本中的所有模式但不是第一个..

我的模式是

{"1", "a", "@", "2", "b", "#", "3", "c", "4"}

我的文字是

/\/((?:.| )+)\//g

所有正则表达式都匹配但是这个正则表达式失败了:

|==== Données ====>
    byteCode =
    {
        id : [],
        tag : [],
        ast : []
    };
<==== Données ====|

|==== Filtres ====>
    *EspaceBlanc        => /\t|\n| /                ;;
<==== Filtres ====|

|==== Terminaux ====>
    $PrefixeId          => /#/                      ;;
    $$Mot               => /[0-9aA-zZ-]/            ;;
    $SufixeInstruction  => /;/                      ;;
    $Separateur         => /,/                      ;;
    $Enfant             => /:/                      ;;
    $$Portée            => /\|/ :: caractère.length ;;
<==== Terminaux ====|

|==== NonTerminaux ====>
    @Tag => $Mot ::
    {
        const nomTag = uniSem[0].toSource();
        const index = byteCode.tag.indexOf(nomTag);
        // Si indexTag non présent Alors index ajout byte code
        return (index >= 0)? index: (byteCode.tag.push(nomTag) - 1);
    };;

    @Id => ~$PrefixeId, $Mot :: byteCode.id.push(uniSem[1].toSource() ) - 1;

    @Elément => @Tag, [@Id] ::
    {
        const indexTag = uniSem[0].toSource();
        const id = (uniSem[1] )? uniSem[1].toSource() : -1;
        return byteCode.ast.push([indexTag, id] ) - 1;
    };;

    @InstructionSimple => @Elément, ~$SufixeInstruction :: uniSem[0].toSource();;

    @Instruction =>
    $Elément, ~$Enfant,
    [{ @Elément, ~$Separateur } ],
    @InstructionSimple ::
    {
        const idParent = uniSem[0].toSource();
        for(let i = 1, iMax = uniSem.length - 1; i < iMax; i++)
        {
            byteCode.ast[idParent].push(uniSem[i].toSource() );
        }
        // ajout de InstructionSimple
        return byteCode.ast[idParent].push(uniSem[uniSem.length - 1].toSource() );
    };
<==== NonTerminaux ====|

|==== Terminale ====>
    console.log('C\'est la fin!!');
<==== Terminale ====|

源代码:

/\t|\n| /

结果:

  • trouvé!! 210
  • trouvé!! 236
  • trouvé!! 278
  • trouvé!! 308
  • trouvé!! 335
  • trouvé!! 363
  • trouvé!! 367
  • trouvé!! 697
  • trouvé!! 983

预期:

  • trouvé!! 136
  • trouvé!! 210
  • trouvé!! 236
  • trouvé!! 278
  • trouvé!! 308
  • trouvé!! 335
  • trouvé!! 363
  • trouvé!! 367
  • trouvé!! 697
  • trouvé!! 983

https://jsfiddle.net/4bx7hboz/5/

编辑: regexr.com或regex101.com上的模式匹配。 这在操作系统中不起作用,因为解析了未找到的“\ t”并且模式不匹配\ t已解析... 我反思一种存储字符串的方法而不解析单词代表特殊字符,如\ t。

感谢您的帮助,不要担心我的文字语言(这不是javascript)。

1 个答案:

答案 0 :(得分:2)

经过研究,使用

的奇怪行为是一百个
var = '/\tstring/';

在这种情况下,var包含的字符串被解析并且\ t转换为一个字符(代码9)。 为了允许正则表达式匹配特殊单词,例如\ t,你不要用

解析字符串
var = String.raw `/\tstring/\`;

事实上,使用此解决方案,您可以区分特殊字符代码9

如果你对正则表达式感兴趣找到正则表达式模式,你可以使用它:

/\/([^*].*)\//

感谢@Thomas和@Bergi

https://jsfiddle.net/matthis/9mnzda3d/2/