我有功能:
var replaceText = function(_findme, _replacement, _str) {
var result = '', i, sub, findmeLength, insideAmp = false;
if(!_str) {
return '';
}
try {
findmeLength = _findme.length;
} catch(ev) {
findmeLength = 0;
}
if(findmeLength === 0) {
return _str;
}
for(i=0;i<_str.length;i++) {
sub = _str.substr(i, findmeLength);
if(sub.toLowerCase() === _findme.toLowerCase() && !insideAmp) {
result += _replacement||'';
i += findmeLength-1;
} else {
result += _str[i];
}
if(_str[i] === '&') {
insideAmp = true;
}
if(_str[i] === ';') {
insideAmp = false;
}
}
return result;
};
是否可以将其更改为正则表达式?
例如,我想用这样的数据运行它:
replaceText('lt', '<b>LT</b>', '<h1>text</h1>Some text lt - linear technology');
结果应该是:
<h1>text</h1>Some text <b>LT</b> - linear technology
基本上我需要一些正则表达式来替换文本中的某些字符,而不会破坏html实体。
当用户搜索某些内容时,我需要它用于动态javascript突出显示。
答案 0 :(得分:1)
以下功能可以解决问题:
replaceText = function(text, replacement, input) {
// Escape regex metacharacters
text = text.replace(/[-\\()\[\]{}^$*+.?|]/g, '\\$&');
// Build the regex
var re = new RegExp("&[^;]+;|\\b(" + text + ")\\b", "gi");
// Do the replacement
return input.replace(re, function(match, foundText) {
return foundText ? replacement : match;
});
};
基本上,正则表达式匹配实体,并且它不替换它,或者它匹配您的搜索字符串,在这种情况下它执行替换。
您的示例给出了以下结果:
<h1>text</h1>Some text <b>LT</b> - linear technology