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
,它就会像你期望的那样工作。
<h1>text</h1>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;
});
};