我正在尝试构建正则表达式,我将在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]);
}