I would like to use create a object that contains regular expressions as the key value. I tried to use the following syntax:
var kv = {
/key/g : \"value\
This can be done, but not using object literal syntax. You'll need to do it like this:
var kv = {};
kv[/key/g] = "value";
console.log(kv[/key/g]); // "value"
/key/g in this case, is being toString()'d to create the key. This is important to know, because it has an effect on key uniqueness. Consider the following:
var x = {},
reg = /foo/;
x[reg] = 'bar';
console.log(x[reg]); // "bar"
console.log(x[reg.toString()]); // "bar"
console.log(x['/foo/']); // "bar'
In summary, I'm semi-scared to ask why you need to do this, but assuming you have your reasons, be careful and make sure you understand what is really happening :)
var result = "abcdef",
replacements = {
"/a/g": "FOO",
"/d/i": "BAR"
};
for (var key in replacements) {
var parts = key.split('/');
result = result.replace(new RegExp(parts[1], parts[2]), replacements[key]);
}
console.log(result); //FOObcBARef
var result = "abcdef",
replacements = [
[/a/g, "FOO"],
[/d/i, "BAR"]
];
for (var i = 0, len = replacements.length; i < len; i++) {
var replacement = replacements[i];
result = result.replace(replacement[0], replacement[1]);
}
console.log(result); //FOObcBARef
var result = "abcdef",
replacements = [
[/a/g, "FOO"],
[/d/i, "BAR"]
], r;
while ((r = replacements.shift()) && (result = String.prototype.replace.apply(result, r))) {}
console.log(result); //FOObcBARef