字符串组不应该在第一个看到的左侧;

时间:2013-08-21 19:56:09

标签: javascript regex

此字符串(kwordSyntaxSearch)应传递条件:

( sdf sdf )
cout<<"abc";

return 0;
}

kwordSyntaxSearch不得超越条件:

( sdf sdf )
cout<<"abc"

return 0;
}

这是一个修改过的条件,来自用户名:f-j的答案来自我的上一个问题,但我意识到我需要更多帮助。这传递了第二段代码(w / c不应该)

if( /^\s*\([\s\S]*\)\s*[^\{](?:(?![^\s\S]if|else|elseif|for|while|do|switch|\}|return)|[\s\S]*);/.test(kwordSyntaxSearch)

如果第一个;之前没有看到任何if,else,else if,for, while,do,switch,},return(左侧),我想传递条件

请你帮我调整一下代码,以便通过第一个区块,而不是第二个区块。

1 个答案:

答案 0 :(得分:0)

前瞻部分似乎有点不对劲。无视长时间的交替,你的结构

(?:(?!...)|[\s\S]*)

一方面,前瞻是完全可选的,甚至无法让你到任何地方,因为它不会消耗任何字符 - 因此它甚至从未使用过。然后,即使您删除了|,也只检查一次条件,然后在[\s\S]*处进行匹配。您需要将*拉出非捕获组,以便在每个位置检查条件,如下所示:

(?:(?!...)[\s\S])*

这是一种模仿[^a]*的常见模式,您想要排除比单个字符a更复杂的内容。所以,你的完整模式看起来像

^\s*\([\s\S]*\)\s*[^\{](?:(?!if|else|elseif|for|while|do|switch|\}|return)[\s\S])*;

^\s*\([^]*\)\s*[^{](?:(?!if|else|elseif|for|while|do|switch|}|return)[^])*;

请注意,我还删除了[^\s\S],因为它无法匹配任何内容。