将String转换为方法参数,特别是在console.log

时间:2016-09-05 06:36:02

标签: javascript regex

我正在研究一个问题,我需要确保在我的代码库中调用console.log时是否存在特定参数。简单地说,主要目标是在不存在的情况下添加该论点。

在我的初始方法中,我将参数列表提取到console.log(...),并考虑以某种方式将其放入任何数组中(我不确定如何。我希望使其足够可靠,如关闭括号,逗号可以在字符串内作为函数的参数等)。

复杂的实例将是

console.log("this is a string,another()",'single \'quote\'',param1, param['key'+some_variable]);

所以任何方法或建议都可以帮助我。

1 个答案:

答案 0 :(得分:0)

注意:下面的代码和正则表达式模式可用于解析单个console.log行作为输入。当您需要解析整个代码时,需要检查JavaScript parser in JavaScript

您可以使用两步法:从一开始就移除console.log(,使用);从最后移除replace,然后使用带有正则表达式的match提取每个单个参数,可以是双引号或单引号字符串文字,也可以是普通变量,内部没有逗号。

您可以使用

var s = 'console.log(/s[\\\\\\/]/g,a/b,`${`foobar, and more foobar`}`,"this is a string,another()",\'single \\\'quote\\\'\',param1, param[\'key\'+some_variable],`"\\` and more`);';
console.log(s.replace(/^console\.log\(|\);$/g,'').match(/\/(?:\\.|[^\\\/])+\/[gim]*|`\${`[^`\\]*(?:\\.[^\\`]*)*`}`|(?:"[^"\\]*(?:\\.[^\\"]*)*"|'[^'\\]*(?:\\.[^\\']*)*'|`[^`\\]*(?:\\.[^\\`]*)*`|[^,])+/g));

用于解析 console.log() 内的字符串的主模式

/\/(?:\\.|[^\\\/])+\/[gim]*|`\${`[^`\\]*(?:\\.[^\\`]*)*`}`|(?:"[^"\\]*(?:\\.[^\\"]*)*"|'[^'\\]*(?:\\.[^\\']*)*'|`[^`\\]*(?:\\.[^\\`]*)*`|[^,])+/g

请参阅regex demo

模式详情

  • ^console\.log\( - 字符串开头的console.log(字符串
  • | - 或
  • \);$ - );位于字符串末尾

  • \/(?:\\.|[^\\\/])+\/[gim]* - 尝试匹配正则表达式文字(以/开头的文字,然后可能有1个或多个非/\ +任何字符,并且可以在追踪g
  • 之后有任何im/组合
  • `\${`[^`\\]*(?:\\.[^\\`]*)*`}` - 匹配特定模板字符串语法
  • (?:"[^"\\]*(?:\\.[^\\"]*)*"|'[^'\\]*(?:\\.[^\\']*)*'|[^,'"]+)+ - 1个或多个序列:
    • "[^"\\]*(?:\\.[^\\"]*)*" - "后跟0 {+ 1}}和\以外的0 +字符,后跟0 {+ 1}} +任何字符的序列但是除了"\以外的0 +字符后面的换行符(双引号文字模式)
    • \ - 或与上述类似的模式,但使用单引号
    • " - 与上述
    • 类似的模板字符串文字模式
    • |'[^'\\]*(?:\\.[^\\']*)*' - 或|`[^`\\]*(?:\\.[^\\`]*)*`|[^,'"]+,以外的1个或多个字符。