2014-10-07 36 views
3

对于一个非常简单的JavaScript模板引擎,我需要检查是否一个给定的字符串“为” javascript代码(如if-elsefor-loopswhile-loops)。因此我使用这个非常简单的正则表达式/(:|=|{|})/g"tested" here)。而此正则表达式的作品,几乎任何时候它以某种方式在某些情况下出现故障时,我使用它在一个循环:检查字符串“是” javascript代码与正则表达式

// Very simple regex to check if string "is" javascript code 
var regFunc = /(:|=|{|})+/g; 
// For testing: a simple javascript array 
var testArray = [ 
    // expected: false, is: false 
    'string', 
    // expected: true, is: true 
    'for(var i=0; i<total;i++) {', 
    // expected: true, is: false (??) 
    '}', 
    // expected: true, is: true 
    '}' 
]; 

for(var i = 0; i < testArray.length; i++) { 
    console.log(
    testArray[ i ], 
    regFunc.test(testArray[ i ]) 
); 
} 

您可以检查JSBin控制台输出。所以我想知道为什么第一个“{”输出false和第二个输出true(这是我对两者的期望)?

+0

我不明白。 '/ [:= {}] + /'应该如何测试字符串是否是javascript?例如它匹配绝对不是javascript的'::::'。谨慎告诉我们关于实际问题的更多信息? – georg 2014-10-07 14:26:17

+0

@georg这就是为什么我在括号中写入“in”。我知道这个正则表达式不检查有效的JavaScript。 – Daniel 2014-10-07 14:34:20

回答

3

MDN - Regex - Test

与EXEC(或与之结合),测试多次调用 在同一个全局正则表达式的实例会提前过去 以前的比赛。

这意味着您每次测试字符串时都必须重新初始化您的regexp对象。

+0

我不确定你的意思是“重新初始化”。我试图删除全球标志,它似乎工作正常。 – Daniel 2014-10-07 14:29:26

+0

在每次测试前删除全局标志或执行'regFunc = /(:| = | {|})+/g;'。 – blue112 2014-10-07 14:32:13

+0

在每次测试之前使用'reg.lastIndex = 0;'可能也适用。 – Daniel 2014-10-07 14:33:40

相关问题