开发者

javascript replace globally with array

开发者 https://www.devze.com 2022-12-16 04:08 出处:网络
You can use array for replacement: var array = {\"from1\":\"to1\", \"from2\":\"to2\"} for (var val开发者_开发知识库 in 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.

0

精彩评论

暂无评论...
验证码 换一张
取 消