regex从字符串中获取所有JavaScript变量名称和值

问题描述 投票:0回答:1

说我有以下字符串:

let code = `
      var x = 4;
      var y=9,
          w=8
      var z=8080
      other()
      x=12

`

我如何编写一个获取所有变量声明的正则表达式?在这种情况下,我想返回所有语句,但不返回任何表达式,因此请排除other()x=12部分。到目前为止,我有

let results = `
      var x = 4;
      var y=9,
          w=8
      var z=8080
      other()
      x=12
      
    `.match(/(var)(.*?)(;|,|\n)/g);
    
console.log(results);

但是我也想不出如何包括w = 8部分,因为那也是声明语句,而排除了表达式。我尝试了.match(/(var|\n)(.*?)(;|,|\n)/g),但它也返回x = 12,这是我不想要的。 即使在其前面有逗号(在前一行或上一个字符,通常允许变量声明的任何东西之前,我也需要返回所有语句块)。

您知道如何使用正则表达式吗?

编辑:

使用uglifyjs,我可以执行以下操作(这是我想要的结果):

let strin = `
      var x = 4;
      var y=9,
          w=8,
          kk = {
              ok:1234
          },
		  p,
		  a = undefined
      var z=8080
      other()
      x=12
     
    `
let results = UglifyJS.parse(strin).body.filter(x=>x.__proto__.TYPE == "Var")
.map(x=>
     x.definitions.map(y=>({
        name:y.name.name,
        value:y.value ? findInPos(y.value.start, y.value.end,strin) : undefined
     })),
    
).flat()
function findInPos(start, end,str) {
    return str.substring(
        start.pos,
        end.endpos
    );
}
<script type="text/javascript" src="https://yaakovyitzchak.github.io/coby/uglify.js">
</script>

但是仅提取每个变量的[[string值似乎有点矫kill过正? (我不需要评估它,只需像这样获取字符串值)

javascript regex string format newline
1个回答
0
投票
该任务可以使用TypeScript Compiler API很好地解决,因为它不仅可以解析TypeScript,还可以解析JavaScript代码。由于TypeScript可以编译为JavaScript-将以下TS代码片段集成到JS项目中应该没有问题。

请参见demo

import ts from "typescript"; const code = ` var x = 4; var y=9, w=8 var z=8080 other() x=12 `; const sf = ts.createSourceFile( "test.js", code, ts.ScriptTarget.ES2017, true, ts.ScriptKind.JS, ); sf.forEachChild((n) => { if (ts.isVariableStatement(n)) { n.declarationList.declarations.forEach((decl) => { const name = decl.name.getText(); const value = decl.initializer?.getText(); console.log(`${name} = ${value}`); }); } });

上面的代码将以下输出打印到控制台:

x = 4 y = 9 w = 8 z = 8080

© www.soinside.com 2019 - 2024. All rights reserved.