3

必须返回真:

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 最后一个词是“主要”,这就是我包含 $ 的原因。我没有进入我的状态。

4

3 回答 3

3

It is much easier to search for the conditions you accept, and error on anything else, with this regex:

^\s*void\s+main$

Use it like this:

if( /^\s*void\s+main$/.test(kword_search) == false ){
    alert('found unnecessary char(s) before keyword main');
}
于 2013-08-16T17:21:14.043 回答
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与 main相同,\s{1,}void但 void 与 main 切换。

于 2013-08-16T17:22:51.420 回答
0

You're mixing up character classes and alternation.

[void|int]

Matches a single one out of these characters: d, i, n, o, t, v, |. What you want is grouping:

/^[^v]*[^\sv][^v]*(?:void|int)\s+main$/

Note that you don't really need to exclude thos v characters before the alternation:

/^.*\S.*(?:void|int)\s+main$/
于 2013-08-16T17:21:28.320 回答