我的主要语法检查条件是没有传递我的所有字符串组合

时间:2013-08-17 09:07:21

标签: javascript regex

这应该通过条件:

syntax_search = (){return 0;}
syntax_search = ( ) { fsf return 0;}
syntax_search = ( ) { return 0; }
syntax_search = (){ return; }
syntax_search = (){ if(x){ sdfsdf } return 0;}
syntax_search = (){ char x[20]; return };

没有通过上述所有组合,正确的方法是什么?

if( /^\s*(\s*)\s*{[\s\S]*\s+return\s*[0-9]*\s*;\s*}\s*/.test(syntax_search) )

2 个答案:

答案 0 :(得分:2)

正则表达式包含许多不必要的复杂性,并且有些字符需要转义,例如{}

无论如何,你可以使用你的正则表达式的这个修改版本,它应该工作。

^\s*\(\s*\)\s*\{(.*(return\s*\d*\s*;)\s*)\}\s*;?$
//                                  ^
//                                  |
//                             There was a ? here

Regex 101 Demo

答案 1 :(得分:0)

一些问题:

  1. 正如M42指出的那样,你需要逃避大括号
  2. 开头的括号也需要转义(否则你要定义一个捕获组)
  3. 表达式需要“return”。您的前2个测试用例不包含单词return,将失败。这是故意的吗?
  4. ;的#3相同。
  5. [\s\S]*任何空间和一切空间。替换为点.*如果您还需要匹配换行符,请使用[^]*
  6. 此正则表达式未锚定到字符串的末尾,因此它将允许无效字符串。 (你可以在最后一次之后放任何你想要的东西}

    / ^ \ S *(\ S *)\ S * {[^] 返回\ S \ d * \ S *; \ S *} \ S * $ /