检查代码字符串中是否存在关键字

时间:2015-08-22 18:32:31

标签: javascript string loops parseint

我正在使用FileReader加载JS文件的内容并将结果转储到textarea容器中。然后我想对实际的JS文件运行一些检查。

我知道可能已经有了这方面的工具(或更好的方法),但这适用于封闭环境项目。

在textarea将JS文件的内容作为一个大字符串包含之后,我需要循环该字符串并找到parseInt()的所有实例,以检查它们是否已经提供了基数。

我会提供代码,但此时我没有任何工作。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

以下代码段将搜索<textarea> parseInt()元素的字符串值,并输出出现的基数(如果适用):

var textareaValue = 'var func = function(){' +
                    'var i = parseInt(1,1);' +
                    'var j = parseInt(10, 10);' +
                    'var k = parseInt(3) + j;' +
                    '};';
occurences = textareaValue.match(/parseInt\(.+?(, ?\d+)?\)/g);
occurences.forEach(function(occurence){
    var hasRadix = /, ?\d+\)$/.test(occurence);
    document.body.innerHTML += '<p>"' + occurence + '" has ' +
                           (hasRadix ? 'a' : 'no') + ' radix' +
                           (hasRadix ? ' (' + occurence.match(/, ?(\d+)\)$/)[1] + ')' : '') +
                           '.</p>';
});

  

请注意,这不是实际的语法解释,它只是文本分析。您必须从结果中获取,其中包含parseInt()的所有出现的字符串。此外,JavaScript允许在文本段落中使用空格,注释,表达式和其他巫术。您可能必须检查任何内容

实际的正则表达式/parseInt\(.+?(, ?\d+)?\)/g将要求......

    比赛开始时
  • parseInt(
  • 任何字符(可能需要通过:punct:扩展为包括括号等)
  • 作为可选组,确定是否提供基数:

    • 一个逗号,一个可选空格(可能需要使用*响应任意数量的空格)
    • 至少一位数(可能需要限制为{1,2},因为只有2到36位有效)
  • 一个尾随的结束括号。

答案 1 :(得分:0)

以下函数应该能够通过简单的正则表达式匹配来区分parseInt与基数的使用与没有基数的用法之间的区别:

function have_radix(str){
     parseIntRegex = /parseInt\(.+?\)/g;
     parseIntRegexWithRadix = /parseInt\(.+?(,.+?\))/g;
     indices = [];
     while ( (result = parseIntRegex.exec(str)) ) {
         indices.push(result.index);
     }
     count = indices.length;
     indices = []; 
     while ( (result = parseIntRegexWithRadix.exec(str)) ) {
         indices.push(result.index);
     }
     diff = count - indices.length;
    return diff;
}