Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

convert array of words (strings) to regex and use it to get matches on a string

What is the most concise and efficient way to translate an array of strings in a regex and then use the regex multiple times on different strings to get the result matches and then iterate over them? Now I'm using the following:

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]);
  }
}

performance is important here, so plain javascript please.

like image 707
kuus Avatar asked Feb 02 '15 15:02

kuus


1 Answers

Just join with pipeline, using Array.join

var regexFromMyArray = new RegExp(myArray.join("|"), 'gi');

and just do this as if condition is just redundant.

for(var i = 0; i < matches.length; i++)
   console.log("Found:", matches[i]);
  1. A single method is being used instead of initial 3. (toString internally calls join(",")) and replace function is also not used.
  2. We have removed an unnecessary if-condition. So that's pretty quick.

And since you talk about regexes, I'd like to say that

  1. A single regex initialization isn't going to cost you much.
  2. If your objective is really to match the words in the array, then just go with String.indexOf, which is a non-regex form of solving the same.
like image 200
Amit Joki Avatar answered Sep 25 '22 16:09

Amit Joki