Ваше регулярное выражение написано неправильно и содержит только один набор символов, из-за чего оно соответствует только одному символу за раз и печатает его.Вам нужно исправить свое регулярное выражение с помощью этого кода 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")
}
Редактировать: Согласно предложению Анубхава , вам на самом деле не нужно отдельно вызывать метод test
изатем match/exec
, который будет дорогостоящим, и вместо этого вы можете использовать эти коды, где устраняется необходимость в методе test
.Спасибо Анубхаве за следование моему ответу и прекрасное предложение.
Вот обновленная демонстрационная версия кода JS,
var people = `- james (vegan)
- David
- Craig (vegetarian)
- Bob (vegan)`
var match = /-\s+(\w+)(?=\s+\(vegan\))/g;
var m = match.exec(people);
if (m == null) {
console.log("invalid")
} else {
console.log(m[1]);
while ((m = match.exec(people))!= null) {
console.log(m[1]);
}
}