2016-11-24 2 views
2
this.personRegex = (input) => { 
      return new RegExp(persons.map((person) => { 
       return person.fullname; 
      }).join("|"), "gi"); 
     } 

die über mir geben:Regex von Schleifen

/lwe|alvin/gi; 

Wie erhalte ich die folgenden:

/\b(?:lwe|alvin)\b/gi; 
+0

Da die zusätzlichen Sachen nicht mit der Anzahl der Personen zu tun haben, tun Sie es einfach im Code ** Regex ("\ b (?:" + Map() + ") \ b") **. – Tobi

+0

Durch Hinzufügen von '\ b' zum Anfang und Ende der Regexp, die Sie erstellen? –

Antwort

1

personRegex = (persons) => { 
 
    return new RegExp("\\b(?:"+persons.map((person, i) => { 
 
     return person.fullname; 
 
    }).join("|") + ")\\b", "gi"); 
 
} 
 

 
console.log(personRegex([{ 
 
    fullname: "lwe" 
 
}, { 
 
    fullname: "alvin" 
 
}]));

1

Sie einfach String-Verkettung tun können :

var personAlternatives = persons.map((person) => { return person.fullname; }).join("|") 
this.personRegex = (input) => { 
    return new RegExp('\\b(?:' + personAlternatives + ')\\b', "gi"); 
} 
1

Dies sollten Sie die am wenigsten Overhead geben:

function buildRegex(array){ 
 
    var reg; 
 
    var mapResult = array.map((item) => { 
 
    return item.attr; 
 
    }).join("|"); 
 
    return new RegExp("\\b(?:"+mapResult+")\\b", "gi"); 
 
} 
 

 
console.log(buildRegex([{attr:"a"},{attr:"b"}]));

+0

Welche Art von Overhead, im Vergleich zu was? –

0

Sie Template Strings verwenden können, mit String.raw sich Gedanken über doppelte Schrägstriche zu vermeiden:

personRegex = input => 
 
    new RegExp(
 
    String.raw`\b(?:${input.map(person => person.fullname).join("|")})\b`, 
 
    "gi"); 
 

 
console.log(personRegex([{fullname: 'Bob'}, {fullname: 'Sally'}]));

In der realen Welt möchten Sie alle möglichen speziellen Regexp-Zeichen in der Eingabe entkommen lassen. Weitere Informationen hierzu finden Sie unter this question.