क्या एक regex में तार की एक सरणी का अनुवाद और फिर प्राप्त करने के लिए अलग-अलग तारों पर regex कई बार उपयोग करने के लिए सबसे संक्षिप्त और कारगर तरीका है परिणाम मेल खाता है और फिर उन पर फिर से शुरू होता है? अब मैं उपयोग कर रहा हूँ निम्नलिखित:परिवर्तित सरणी regex और इसका इस्तेमाल एक स्ट्रिंग के मैच में प्राप्त करने के लिए करने के लिए
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]);
}
}
प्रदर्शन यहाँ महत्वपूर्ण है, इसलिए सादा जावास्क्रिप्ट करें।
ठीक है, मुझे लगता है कि आप वास्तव में मामले में इनपुट तार वे विशेष regexp वर्ण हो से बचने के लिए की जरूरत का उल्लेख करना चाहिए। इसके अलावा, यदि ओपी प्रदर्शन के बारे में बहुत चिंतित है, तो उसे रेगेक्सपी बनाने की एक-बार लागत के बारे में कम चिंता होनी चाहिए, और वास्तविक मिलान प्रदर्शन के बारे में अधिक चिंतित होना चाहिए। उस परिप्रेक्ष्य से, क्या आप प्रत्येक स्ट्रिंग को अलग-अलग जांचने के दृष्टिकोण की तुलना में रेगेक्सप्स के प्रदर्शन पर विचार कर सकते हैं? –
@torazaburo मैं निश्चित रूप से चाहता हूँ। कि दृष्टिकोण से * रखकर आप regexps के प्रदर्शन पर विचार कर सकता है सिर्फ व्यक्तिगत रूप से प्रत्येक स्ट्रिंग की जाँच के दृष्टिकोण की तुलना में? * यदि आप अर्थ कर रहे हैं 'indexOf'? –
सामान्य रूप से, अच्छा उत्तर सरणी के आकार पर निर्भर करता है ... मैंने आपके दोनों स्रोतों के साथ jsperf बनाया और indexOf के साथ मेरा कार्यान्वयन किया [http://jsperf.com/match-on-string-an-array -संभावनाएं) ... बेहतर प्रतीत होता है। –