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

Convert String into method arguments, specifically in console.log

本文关键字:特别是 console log 参数 String 转换 方法      更新时间:2023-09-26

我正在处理一个问题,我需要确保在我的代码库中,对console.log的调用中是否存在特定的参数。简单地说,如果不存在,主要目标将是添加该论点。

在我最初的方法中,我提取了console.log(...)的参数列表,并考虑以某种方式将其制作成任何数组(我不确定如何制作。我希望它足够可靠,比如大括号,逗号可以在字符串中作为函数的参数等(。

就是一个复杂的例子

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

所以,任何帮助我前进的方法或建议。

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

您可以使用两步方法:使用replace从开头删除console.log(,从结尾删除);,然后使用带有正则表达式的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演示。

图案详细信息

  • 字符串起始处的^console'.log'(-console.log(字符串
  • |-或
  • 字符串末尾的');$-);

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