javascript replace globally with array
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.
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.
Here is my solution, assuming the string keys in array
need not to be escaped.
It is particularly efficient when the object array
is large:
var re = new RegExp(Object.keys(array).join("|"), "g");
var replacer = function (val) { return array[val]; };
text = text.replace(re, replacer);
Note this requires the Object.keys
method to be available, but you can easily shim it if it is not.
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.
精彩评论