如何使用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;