Jaki jest najbardziej zwięzły i skuteczny sposób tłumaczenia tablicy łańcuchów w wyrażeniu regularnym, a następnie użyj wyrażenia wielokrotnie na różnych ciągach, aby uzyskać wynik pasuje, a następnie iterować? Teraz używam następujące:zamień tablicę słów (ciągi znaków), aby wyodrębnić i użyj jej do uzyskania dopasowań na ciągu znaków.
var myArray = ['peaches', 'bananas', 'papaya', 'supercity'];
var myString = 'I want some papaya and some peaches';
var regexFromMyArray = new RegExp(myArray.toString().replace(/,/g, '|'), 'gi');
var matches = myString.match(regexFromMyArray) || [];
if (matches.length) {
for (var i = 0, l = matches.length; i < l; i++) {
console.log('Found: ' + matches[i]);
}
}
wydajność jest tutaj ważne, więc zwykły javascript proszę.
Cóż, myślę, że naprawdę powinieneś wspomnieć o potrzebie ucieczki od ciągów wejściowych na wypadek, gdyby zawierały specjalne znaki regexp. Ponadto, jeśli OP jest tak zaniepokojony osiągami, powinien mniej martwić się jednorazowym kosztem budowania regexp i bardziej martwił się o faktyczne dopasowanie wydajności. Z tej perspektywy, czy mógłbyś skupić się na wydajności wyrażeń regularnych w porównaniu do podejścia polegającego na sprawdzaniu pojedynczego ciągu osobno? –
@torazaburo Z pewnością. * Z tej perspektywy, czy mógłbyś się skupić na wydajności wyrażeń regularnych w porównaniu do podejścia polegającego na sprawdzaniu pojedynczego ciągu osobno? * Czy masz na myśli 'indexOf'? –
Jak zwykle, dobra odpowiedź zależy od rozmiaru tablic ... Zrobiłem [jsperf z twoim źródłem i moją implementacją z indexOf] (http://jsperf.com/match-on-string-an-array -of-możliwości) ... wydaje się być lepszy. –