正则表达式查找像"formulas"这样的 Excel



我正在尝试构建正则表达式,我将在javascript上使用这些正则表达式来分析具有类似excel公式的字符串我只想要括号前的单词,

如果有一些东西,那么FORMULA1(FORMULA2(这个不是,在->(a+b(之前没有单词((ELSE‘这个(我不想要(’

1:我设法做到了:(\s\s+?(?=(((,这给了我FORMULA1和一(,但我希望它在第一次查找后停止(理想情况下,我希望正则表达式不包括前面的空格,但我可以接受(

2:因为一旦我找到它,我就剪断绳子,重新运行find FORMULA2。然而,我的正则表达式不起作用,因为在FORMULA2之前没有空格,而是一个(我需要像\s|这样的东西((但这根本不起作用…

3:我想排除引号之间的括号"我不知道如何做">

非常感谢指导!这里有一个regex101来帮助

对于您的示例数据,您可以使用:

'[^']*'|([^s(]+(?=())

解释

  • '[^']*'''匹配
  • |
  • (捕获组1- [^s(]+匹配1+倍除空白字符或(以外的任何字符
    • (?=()正面展望,断言右边是(
  • )关闭组

Regex演示

例如

const regex = /'[^']*'|([^s(]+(?=())/g;
const str = `IF some stuff THEN FORMULA1(FORMULA2(that it is but not this one (a+b))) ELSE 'this one(I dont want)'`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
if (undefined !== m[1]) console.log(m[1]);
}

最新更新