我有一个循环遍历包含预编译正则表达式模式的嵌套对象的函数。它根据字符串检查每个模式,如果匹配,则使用" abriv"进行替换。值。
代码有效,但我注意到在调试模式下检查循环时,'正则表达式'并且' abriv'正在根据字符串检查属性。
如何优化此循环以仅循环显示正则表达式'当它为......进行第二次时的价值?我尝试使用像'prop.regex'这样的访问器。在循环中但似乎不起作用。
var car = /(\bauto\b|\bvehicle\b|\bride\b)/ig
var bus = /(\bcoach\b)/ig
var train = /(\bexpress\b|\brail\b)/ig
var regexList = {
car: {
abriv: 'car',
regex: car
},
bus: {
abriv: 'bus',
regex: bus
},
train: {
abriv: 'train',
regex: train
}
}
var testString = "I drove the auto";
function replacer(text) {
for (var regex in regexList) {
var obj = regexList[regex];
for (var prop in obj) {
if (obj.regex.test(text) === true) {
this.text = text.replace(obj.regex, obj.abriv);
return this;
}
}
}
}
replacer(testString);

答案 0 :(得分:1)
我认为你甚至不需要你的第二次循环。
function replacer(text) {
for (var regex in regexList) {
var obj = regexList[regex];
if (obj.regex.test(text) === true) {
this.text = text.replace(obj.regex, obj.abriv);
return this;
}
}
}
这里缺少什么东西吗?