必须返回 TRUE:
kword_search = wvoid main
kword_search = a ew void main
kword_search = wvoid main
kword_search = o void main
必须返回 FALSE
kword_search = void main
kword_search = void main
kword_search = void main
到目前为止我做了什么:
if( /^[^v]*[^\sv][^v]*[void|int]\s+main$/.test(kword_search) ){
alert('found unnecessary char(s) before keyword main');
}
条件将被测试为kword_search最后一个单词是'main',这就是我包含$的原因。我没有进入我的状态。
答案 0 :(得分:3)
使用此正则表达式搜索您接受的条件和其他任何错误要容易得多:
^\s*void\s+main$
像这样使用:
if( /^\s*void\s+main$/.test(kword_search) == false ){
alert('found unnecessary char(s) before keyword main');
}
答案 1 :(得分:1)
您可以使用
^kword_search =\s{1,}void\s{1,}main
因此,对于你的JS,它看起来像
if( /^kword_search =\s{1,}void\s{1,}main/.test(kword_search) == false){
alert('found unnecessary char(s) before keyword main');
}
工作原理
^
表示开始一行,所以我们从那开始。 kword_search =
只是搜索它。 \s{1,}
表示至少有1个空格(或\s
匹配字符),但最多为无穷大。 void
就是这样,但由于它紧跟在\s
之后,因此不能有一个字符。 \s{1,}main
与\s{1,}void
相同,但void与main切换。
答案 2 :(得分:0)
你正在混淆角色类和交替。
[void|int]
匹配以下字符中的单个字符:d
,i
,n
,o
,t
,v
,{{ 1}}。你想要的是分组:
|
请注意,在替换之前,您实际上不需要排除/^[^v]*[^\sv][^v]*(?:void|int)\s+main$/
个字符:
v