Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 需要帮助在JS中形成正则表达式吗_Javascript_Regex - Fatal编程技术网

Javascript 需要帮助在JS中形成正则表达式吗

Javascript 需要帮助在JS中形成正则表达式吗,javascript,regex,Javascript,Regex,我有一些文本块,具有以下形式的一个或多个函数 $fn{{#split(${{node::1234}},${{node::1345}},',')}} 我需要一个正则表达式来使用正则表达式从文本中收集函数。 我试着使用下面的一个: /\$(fn|)\{{2}(((?!\}\}).)+)\}{2}/g 但是它只捕获$fn{{{#split(${{{node::1234}}}——而不是捕获整个函数 const input=“$fn{{#split(${{node::1234},${{node::1

我有一些文本块,具有以下形式的一个或多个函数

$fn{{#split(${{node::1234}},${{node::1345}},',')}}
我需要一个正则表达式来使用正则表达式从文本中收集函数。 我试着使用下面的一个:

/\$(fn|)\{{2}(((?!\}\}).)+)\}{2}/g
但是它只捕获
$fn{{{#split(${{{node::1234}}}
——而不是捕获整个函数

const input=“$fn{{#split(${{node::1234},${{node::1345},,')}”;
常数rx=/\$(fn |)\{{2}((((?!\}))+)\}{2}/g
常数匹配=输入匹配(rx);

console.log(matches);
这至少适用于给定的示例
/\$((fn|)\{{2}(.\}{2})*)/g


<>希望这有助于

这种情况下的预期结果是什么?你需要整个函数作为匹配吗?还是它的一部分?通常在这样的情况下,你需要一个解析器,而不是正则表达式。我建议你考虑它。ReGEX是一个坏工具,因为你必须明确地允许所有有效语法的组合。“我有足够的或过于宽容的,或者两者都不匹配。@VLAZ-谢谢你的建议。你能告诉我如何为此编写一个解析器吗?谢谢。但是,如果两个这样的表达式之间有其他文本,它将捕获整个表达式。像这样-
$fn{{35; split(${node::1234},${node::1345},,”)}其他一些文本$fn{{{{35; split(${node::1234},${{node::1345},')}
对于更复杂的字符串,可能需要编写一个解析器……
递归下降解析器
非常容易实现,似乎符合您的要求。我认为这应该可以工作-
/\$((fn})\{2}(^[\s\\\]*]*})/g