javascript - JS String.replace can be tempremental with Safari -


the backstory:

this works fine in browsers except safari (5.0.1)

var chunk = arr[i]; chunk = chunk.replace('$', '\\$'); var = eval('message.match(/' + chunk + '/gi);'); if(a instanceof array) symbol = symbol.concat(a); 

so modified following:

var chunk = string(arr[i]); chunk = chunk.replace('$', '\\$'); var = eval('message.match(/' + chunk + '/gi);'); if(a instanceof array) symbol = symbol.concat(a); 

which made safari bit more happy throwing ambiguous error (fun!)

i've found solution , i'm posting below in case other fellow scripters run problem.

i couldn't reproduce problem because i'm not sure what's value of chunk.

anyway, 1 more example of unnecessary usage of eval, can use regexp constructor build regexp object string, example:

var re = /foo/gi; 

is equivalent creating object in runtime regexp constructor:

var re = new regexp('foo', 'gi'); 

applying code:

var chunk = string(arr[i]); // use string() if not sure if arr[i]  // aware following line replacing first $  // char , may want scape other meta-characters: chunk = chunk.replace('$', '\\$'); var = message.match(new regexp(chunk,'gi'));  if(a instanceof array) symbol = symbol.concat(a); 

Comments

Popular posts from this blog

ASP.NET/SQL find the element ID and update database -

jquery - appear modal windows bottom -

c++ - Compiling static TagLib 1.6.3 libraries for Windows -