regex 正则表达式匹配main函数之外的所有内容

mfpqipee  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(108)

我目前使用CodeMirror,带有JavaScript,似乎不支持lookahead或lookbehind。我可以只提供一个RegEx给CodeMirror,不需要任何代码,它会高亮显示匹配的内容。
用户应该在一个函数中编写所有内容,这个函数被认为是“根”函数。
例如,这是正确的:

=FUNCTION(X="t")

字符串
而这不是:

=FUNCTION(X="t")=()


我需要创建一个正则表达式来匹配“=FUNCTION(...)"之外的所有内容,因此在此上下文中,“=()”不使用lookbehind或lookahead。
所需的结果应与以下内容匹配:

=FUNCTION(...)=()
              ^^^
=FUNCTION(X="t")=()
                ^^^
=FUNCTION(X="t"()()())=()
                      ^^^
=FUNCTION(X="t"()()())=(()=()
                      ^^^^^^^
=FUNCTION(X="t"()()())=XXXXXX
                      ^^^^^^^
=FUNCTION(X="t"""()()())=XXXXXX
                        ^^^^^^^
=FUNCTION(X="t"""()()(), X()="b")=XXXXXX
                                 ^^^^^^^

有办法做到吗?

7rtdyuoh

7rtdyuoh1#

使用捕获组。对于内部括号,使用可选的非捕获组:
(.*)-函数之前的任何内容,如果不需要,请删除
=FUNCTION\(-函数声明
[^()]*-函数中第一个括号之前的任何内容
(?:.*\([^()]*\))*-任意数量的匹配圆括号和闭合圆括号之间的任何内容。
[^()]*-函数的右括号之前的任何内容
\)-右括号
(.*)-函数后的任何内容

const regex = /(.*)=FUNCTION\([^()]*(?:.*\([^()]*\))*[^()]*\)(.*)/;

const match = str => console.log(JSON.stringify(str.match(regex).slice(1)));

match('prefix =FUNCTION(X="t"()()())=(()=()');
match('=FUNCTION(X="t"""()()(), X()="b")=XXXXXX');
match('=FUNCTION(X="t"""()()(), X()="b")');

字符串

相关问题