我的正则表达式在“void main”之前找到不必要的字符有什么问题

时间:2013-08-16 17:19:03

标签: javascript regex

必须返回 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',这就是我包含$的原因。我没有进入我的状态。

3 个答案:

答案 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

Link

因此,对于你的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]

匹配以下字符中的单个字符:dinotv,{{ 1}}。你想要的是分组:

|

请注意,在替换之前,您实际上不需要排除/^[^v]*[^\sv][^v]*(?:void|int)\s+main$/ 个字符:

v