正则表达式:在JavaScript源代码中匹配'in'运算符

时间:2018-12-01 12:57:38

标签: c# .net regex regex-lookarounds

我正在尝试对C#中的JavaScript源代码进行非常简单的静态分析。我想创建一个正则表达式,可以匹配并替换源代码中“ in”运算符的用法。

参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in

我在此方面取得了成功,但是我需要排除在“ for”循环中使用“ in”运算符的情况。

因此,此示例代码:

const oneVariable = 'property' in myObject;
var trees = ['redwood', 'bay', 'cedar', 'oak', 'maple'];
const anotherVariable = 0 in trees;
const newVariable = variableName in myObject;
const newerVariable = (otherVarName in myObject);

console.log(whateverVariable in document);

for (var property1 in object1) {
  string1 += object1[property1];
}

for (const property2 in object1) {
  string1 += object1[property1];
}

for (let property3 in object1) {
  string1 += object1[property1];
}

我要匹配这些:

    myObject中的
  • “属性”
  • 在树中为0
  • myObject中的变量名称
  • myObject中的
  • 文档中的任何变量

但由于for()块且与var / const / let关键字无关,因此不匹配这些变量:

  • 对象1中的属性1
  • 对象1中的属性2
  • 对象1中的属性3

在C#中实现此目标的正确正则表达式是什么?

1 个答案:

答案 0 :(得分:0)

// input is your Javascript code    
var matches = Regex.Matches(input, @"(?<!(?:for\s?\()(?:.*)?)(\'?\w+\'?\sin\s\w+)");

var matchedInStatements = matches.Cast<Match>().Select(i => i.Value).ToList();

matchedInStatements现在将所有匹配项都保存为字符串。

有关说明,请查看this