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

Javascript 是否可以编写短正则表达式来替换函数,javascript,regex,replace,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(findmeLengt

我有以下职能:

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;
};
var replaceText=函数(\u findme,\u replacement,\u str){
var结果=“”,i,sub,findElement,Insideeamp=false;
如果(!\u str){
返回“”;
}
试一试{
findmeLength=_findme.length;
}捕获量(ev){
findmeLength=0;
}
如果(FindElement==0){
返回_str;
}

对于(i=0;i,以下函数将执行此操作:

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;
    });
};
基本上,要么正则表达式匹配一个实体,它不替换它,要么它匹配您的搜索字符串,在这种情况下,它执行替换

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

h1text/H1一些文本LT-线性技术

用正则表达式解析HTML不是一种流行的方法:)试着用谷歌搜索一下原因。正则表达式可以匹配正则语言,而HTML不是正则语言。最好给出示例,而不是提供代码。我真的不理解你的示例。你想,但是
标记周围的
lt
,所以你最终得到的是
<;
?你为什么要这样做?有很多原因可能是一种比正则表达式或该函数更好的方法,但您的意图不清楚。@MortenJensen您在哪里看到他在解析HTML?HTML实体是规则的(类似于
和#?\w+;
),并且今天的正则表达式不再是常规的。您可以将实体与正则表达式匹配,而不会有任何问题。@眯着眼睛我不想以<;-这是我的问题。我有带有实体的文本,我想在不破坏它们的情况下替换此文本。这对“am”、“am”、“ammy is my girl”之类的数据不起作用。它应该返回:“阿米是我的女孩”@Ascon哦,我故意这么做是因为我认为它应该是这样工作的……只要同时删除
\\b
,它就会像你期望的那样工作。
&lt;h1&gt;text&lt;/h1&gt;Some text <b>LT</b> - linear technology
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;
    });
};