此字符串(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
(左侧),我想传递条件
请你帮我调整一下代码,以便通过第一个区块,而不是第二个区块。
答案 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]
,因为它无法匹配任何内容。