Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 一组字符串不应位于第一个看到的字符串的左侧;_Javascript_Regex - Fatal编程技术网

Javascript 一组字符串不应位于第一个看到的字符串的左侧;

Javascript 一组字符串不应位于第一个看到的字符串的左侧;,javascript,regex,Javascript,Regex,此字符串(kwordSyntaxSearch)应通过以下条件: ( sdf sdf ) cout<<"abc"; return 0; } ( sdf sdf ) cout<<"abc" return 0; } 这是我上一个问题中username:f-j答案的修改条件,但我意识到我需要更多帮助。这通过了第二段代码(w/c不应该) 我想通过条件,如果第一个没有看到任何if,else,else if,for,while,do,switch,},return(在其左侧)

此字符串(
kwordSyntaxSearch
)应通过以下条件:

( sdf sdf )
cout<<"abc";

return 0;
}
( sdf sdf )
cout<<"abc"

return 0;
}
这是我上一个问题中username:f-j答案的修改条件,但我意识到我需要更多帮助。这通过了第二段代码(w/c不应该)

我想通过条件,如果第一个
没有看到任何
if,else,else if,for,while,do,switch,},return
(在其左侧)


你能帮我调整代码,使它能通过第一个块而不是第二个块吗。

前瞻部分似乎有点错误。不考虑长时间的交替,你的有结构

(?:(?!...)|[\s\S]*)
首先,前瞻是完全可选的,甚至不能带你去任何地方,因为它不消耗字符,所以它从来没有被使用过。然后,即使删除了
|
,也只需检查一次条件,然后在
[\s\s]*
处进行匹配。您需要将
*
拉到非捕获组之外,以便在每个位置检查条件,如下所示:

(?:(?!...)[\s\S])*
这是模拟
[^a]*
的一种非常常见的模式,您希望排除比单个字符
a
更复杂的内容。所以,你的整个图案看起来像

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


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

您确定可以使用正则表达式执行整个sytax检查吗?看起来您正在实现某种特定于领域的语言。也许你应该考虑使用分析器生成器,例如,这是C++初学者,一个模拟变量值的系统。这是我认为最难的部分。^完全等同于\s\s吗?我什么时候确切地放置\b,这样如果字符串包含“switcher”,它就不会是一个problem@fireflieslive第一个问题,没有,但是
[^]
在JS中完全等同于
[\s\s]
。在单词周围使用
\b
。如
\b开关\b
。要对所有单词执行此操作,可以使用
(?!\b(?:if | else |…)\b)
^\s*\([\s\S]*\)\s*[^\{](?:(?!if|else|elseif|for|while|do|switch|\}|return)[\s\S])*;
^\s*\([^]*\)\s*[^{](?:(?!if|else|elseif|for|while|do|switch|}|return)[^])*;