我有此代码,我想打印出所有素食主义者的姓名,目前只打印“-”。
var people = `- james (vegan)
- David
- Craig (vegetarian)
- Bob (vegan)`
if (/[-\s(\w+?)\s(?=\(vegan\))]/.test(people) == true)
{
var match = /[-\s(\w+?)\s(?=\(vegan\))]/
document.write(people.match(match))
}
else
{
document.write("invalid")
}
我也尝试过
console.log(people.match(match));
任何帮助都会很棒!
答案 0 :(得分:3)
您的正则表达式写错,并且只有一个字符集,因此它一次只能匹配一个字符并打印出来。您需要使用此JS代码更正您的正则表达式,
var people = `- james (vegan)
- David
- Craig (vegetarian)
- Bob (vegan)`
if (/-\s+\w+(?=\s+\(vegan\))/.test(people) == true)
{
var match = /-\s+\w+(?=\s+\(vegan\))/
console.log(people.match(match))
}
else
{
console.log("invalid")
}
如果只想打印纯素食者的姓名,则可以使用此代码。
var people = `- james (vegan)
- David
- Craig (vegetarian)
- Bob (vegan)`
if (/-\s+\w+(?=\s+\(vegan\))/.test(people) == true)
{
var match = /-\s+(\w+)(?=\s+\(vegan\))/g;
var m = match.exec(people);
while (m!= null) {
console.log(m[1]);
m = match.exec(people);
}
}
else
{
console.log("invalid")
}
编辑:
根据{{3}}的建议,实际上您不需要分别调用test
方法,然后再调用match/exec
,这将很昂贵,而您可以在需要{{ 1}}方法已删除。感谢Anubhava跟踪我的回答并提出宝贵建议。
这是更新的JS代码演示
test
答案 1 :(得分:1)
您可以使用正则表达式/\s*-\s(.+?)\s\(vegan\)/
。像这样使用exec
:
let regex = /\s*-\s(.+?)\s\(vegan\)/g,
matches = [],
match,
str = `- james (vegan)
- David
- Craig (vegetarian)
- Bob (vegan)`
while(match = regex.exec(str))
matches.push(match[1])
console.log(matches)
答案 2 :(得分:0)
people.split('\n')
.map(line=>line.trim())
.map(line=>{
let matched = line.match(/-\s(\w+)(\s\((\w+)\))?/);
return {name: matched[1],type:matched[3]};
})
.filter(item=>item.type=='vegan')
.map(item=>item.name)