如何使用javascript从字符串中获取所有宏名称?

如何使用javascript从字符串中获取所有宏名称?,javascript,Javascript,给定下面的字符串,我尝试获取每个不带“()”的宏名 使用正则表达式: data=`{%macro exportButtonLink()%} 出口 {%endmacro%} {%macro submitButton()%} 提交按钮 {%endmacro%} {%macro ResetButton()%} 重置按钮 {%endmacro%}`; 宏=data.match(/macro\w+/g); console.log(宏)我根据您的数据猜测,宏总是跟在单词“marco”后面,并且总是在末尾包

给定下面的字符串,我尝试获取每个不带“()”的宏名


使用正则表达式:

data=`{%macro exportButtonLink()%}
出口
{%endmacro%}
{%macro submitButton()%}
提交按钮
{%endmacro%}
{%macro ResetButton()%}
重置按钮
{%endmacro%}`;
宏=data.match(/macro\w+/g);

console.log(宏)我根据您的数据猜测,宏总是跟在单词“marco”后面,并且总是在末尾包含一组括号。如果是这样,您可以使用带有
g
标志的正则表达式来查找所有匹配项

可以多次调用regex
.exec
方法以给出找到的每个匹配项。您可以使用它作为循环的条件来获取每个匹配项,直到不再有匹配项为止(宏名称将是每个匹配项的第一个捕获组):

data=`{%macro exportButtonLink()%}
出口
{%endmacro%}
{%macro submitButton()%}
提交按钮
{%endmacro%}
{%macro ResetButton()%}
重置按钮
{%endmacro%}`;
常量rgx=/macro(\w+)\(/g;
让m;
while(m=rgx.exec(数据)){
console.log(m[1])

}
这里有一个正则表达式,确保文本包含在所需的分隔符中

/{%\s+macro\s+([^(]+)\(\)\s+%}/g;
在循环中使用
.exec()
方法提取结果

点击演示:

var re=/{%\s+macro\s+([^(]+)\(\)\s+%}/g;
变量数据=`{%macro exportButtonLink()%}
出口
{%endmacro%}
{%macro submitButton()%}
提交按钮
{%endmacro%}
{%macro ResetButton()%}
重置按钮
{%endmacro%}`;
var结果=[];
var match=null;
而((match=re.exec(data))){
结果:推送(匹配[1]);
}

console.log(result);
基于非正则表达式的解决方案,使用一些简单的字符串和数组操作,并根据示例数据进行假设

分割
映射
修剪
分割切片
过滤

let data=`{%macro exportButtonLink()%}
出口
{%endmacro%}
{%macro submitButton()%}
提交按钮
{%endmacro%}
{%macro ResetButton()%}
重置按钮
{%endmacro%}`;
console.log(data.split(“\n”).map(函数(行){
if(line.indexOf(“{%macro”)>-1){
返回行.trim().split(“”[2]。切片(0,-2);
}

}).filter(Boolean))
您使用的是
CMake
?我不知道这个语法和宏handling@messerbill,这里的宏是存储在文本文件中的字符串,所以在我读取文本文件后,它返回一个如上所述的字符串,我想从该字符串中提取这些宏名称。是的,这是正确的,我正在尝试实现,非常感谢。
for (var i = 0; i < data.length; i++) {
    console.log(data.charAt(i));
}
/{%\s+macro\s+([^(]+)\(\)\s+%}/g;