是否可以编写短正则表达式来替换函数

时间:2014-10-29 15:30:45

标签: javascript regex replace

我有功能:

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>', '&lt;h1&gt;text&lt;/h1&gt;Some text lt - linear technology');

结果应该是:

&lt;h1&gt;text&lt;/h1&gt;Some text <b>LT</b> - linear technology

基本上我需要一些正则表达式来替换文本中的某些字符,而不会破坏html实体。

当用户搜索某些内容时,我需要它用于动态javascript突出显示。

1 个答案:

答案 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;
    });
};

基本上,正则表达式匹配实体,并且它不替换它,或者它匹配您的搜索字符串,在这种情况下它执行替换。

您的示例给出了以下结果:

&lt;h1&gt;text&lt;/h1&gt;Some text <b>LT</b> - linear technology