tags:

views:

65

answers:

3

Hi.

I need to check JS matches for a dynamically generated string.

ie.

for(i=0; i< arr.length; i++)
{
 pattern_1="/part of "+arr[i]+" string!/i";

 if( string.search(pattern_1) != -1)
  arr_num[i]++;

}

However, this code doesn't work - I presume due to the quotes. How do I do this?

Many thanks.

+3  A: 

The /pattern/ literal only works as, well, a literal. Not within a string.

If you want to use a string pattern to create a regular expression, you need to create a new RegExp object:

var re = new RegExp(pattern_1)

And in that case, you would omit the enclosing frontslashes (/). These two lines are equivalent:

var re = /abc/g;
var re = new RegExp("abc", "g");
Triptych
Thanks, that solves the problem =)
Rohan
@Rohan, then you should accept the answer. Click that checkmark below the number of votes.
Triptych
Ahh, done. I'm new here :D
Rohan
+1  A: 

The problem is that you are passing a string to the search function so it treats it as a string. Try using a RegExp object like so:

myregexp = new RegExp("part of " + arr[i] + " string!", "i")
if (string.search(myregexp) != -1) {
   arr_num[i]++;
}
Topher Fangio
+1  A: 

Try this:

// note you dont need those "/" and that "i" modifier is sent as second argument
pattern_1= new RegExp("part of "+arr[i]+" string!", "i");
Rubens Farias