我有一个匹配简单正则表达式的正则表达式模式,这可以捕获文本中的所有模式但不是第一个..
我的模式是
{"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| /
结果:
预期:
https://jsfiddle.net/4bx7hboz/5/
编辑: regexr.com或regex101.com上的模式匹配。 这在操作系统中不起作用,因为解析了未找到的“\ t”并且模式不匹配\ t已解析... 我反思一种存储字符串的方法而不解析单词代表特殊字符,如\ t。
感谢您的帮助,不要担心我的文字语言(这不是javascript)。
答案 0 :(得分:2)
经过研究,使用
的奇怪行为是一百个var = '/\tstring/';
在这种情况下,var包含的字符串被解析并且\ t转换为一个字符(代码9)。 为了允许正则表达式匹配特殊单词,例如\ t,你不要用
解析字符串var = String.raw `/\tstring/\`;
事实上,使用此解决方案,您可以区分特殊字符代码9
如果你对正则表达式感兴趣找到正则表达式模式,你可以使用它:
/\/([^*].*)\//
感谢@Thomas和@Bergi