views:

315

answers:

2

You can use array for replacement:

var array = {"from1":"to1", "from2":"to2"}

for (var val in array)
    text = text.replace(array, array[val]);

But what if you need to replace globally, ie text = text.replace(/from/g, "to");

Array is pretty big, so script will take a lot of space if I write "text = text.replace(...)" for every variable.

How can you use array in that case? "/from1/g":"to1" does not working.

+2  A: 
var array = {"from1":"to1", "from2":"to2"}

for (var val in array)
    text = text.replace(new RegExp(val, "g"), array[val]);

Edit: As Andy said, you may have to escape the special characters using a script like this one.

Fabien Ménager
If the string could contain regexp special characters, don't forget to correctly escape them.
Andy E
+1  A: 

Here's the idiom for simple, non-RegExp-based string replace in JS, so you don't need to worry about regex-special characters:

for (var val in array)
    text= text.split(val).join(array[val]);

Note there are issues with using an Object as a general purpose lookup. If someone's monkeyed with the Object prototype (bad idea, but some libraries do it) you can get more val​s than you wanted; you can use a hasOwnProperty test to avoid that. Plus in IE if your string happens to clash with a method of Object such as toString, IE will mysteriously hide it.

For your example here you're OK, but as a general case where the strings can be anything, you'd need to work around it, either by processing the key strings to avoid clashes, or by using a different data structure such as an Array of [find, replace] Arrays.

bobince