Javascript JS替换为正则表达式
需要一个正则表达式。如果我想用“PPP”代替“abcdf”Javascript JS替换为正则表达式,javascript,regex,Javascript,Regex,需要一个正则表达式。如果我想用“PPP”代替“abcdf” XabcdfX是xxxxxxx。有xxxxx。abcdf是xxxxxxx。zxabcdf abcdf。 然后是预期的产出 XPPPX is xxxxxxx. <MabcdfM> has xxxxx. PPP is xxxxxxx. <FabcdfF> zxPPP PPP. XPPPX是xxxxxxx。有xxxxx。购买力平价为xxxxxxx。zxPPP PPP。 abcdf可以是整个字符串,甚至可以是子字符
XabcdfX是xxxxxxx。有xxxxx。abcdf是xxxxxxx。zxabcdf abcdf。
然后是预期的产出
XPPPX is xxxxxxx. <MabcdfM> has xxxxx. PPP is xxxxxxx. <FabcdfF> zxPPP PPP.
XPPPX是xxxxxxx。有xxxxx。购买力平价为xxxxxxx。zxPPP PPP。
abcdf可以是整个字符串,甚至可以是子字符串。它将只是字母数字。只有当它不在<>之间时才能更换
我需要使用javascript替换方法来完成。请帮帮我 您可以使用:
s=s.replace(/abcdf|(]*>)/g,函数(g0,g1){返回g1?g1:'PPP';});
工作示例:
显然,如果您有嵌套或不匹配的尖括号对,则此操作将失败。您可以使用:
s=s.replace(/abcdf|(]*>)/g,函数(g0,g1){返回g1?g1:'PPP';});
工作示例:
显然,如果有嵌套的或不匹配的尖括号对,则此操作将失败。如果可以确定没有类似>,我将迭代使用indexOf函数,而不是使用正则表达式:
index = string.indexOf("<", lastIndex);
index = string.indexOf(">", index);
index = string.indexOf("abcd", index);
string = string.substring(0, index)+"PPP"+string.substring(index+4);
index=string.indexOf(“,index);
index=string.indexOf(“abcd”,index);
string=string.substring(0,索引)+“PPP”+string.substring(索引+4);
如果您可以确定,没有什么比>,我将迭代使用indexOf函数,而不是使用正则表达式:
index = string.indexOf("<", lastIndex);
index = string.indexOf(">", index);
index = string.indexOf("abcd", index);
string = string.substring(0, index)+"PPP"+string.substring(index+4);
index=string.indexOf(“,index);
index=string.indexOf(“abcd”,index);
string=string.substring(0,索引)+“PPP”+string.substring(索引+4);
假设您的“标记”不能嵌套,您可以使用前瞻断言:
s.replace(/abcdf(?=[^<>]*(<|$))/g, "PPP")
s.replace(/abcdf(?=[^]*(假设您的“标记”不能嵌套,您可以使用前瞻断言:
s.replace(/abcdf(?=[^<>]*(<|$))/g, "PPP")
s.replace(/abcdf(?=[^]*(var collect=function,s,re)
{
var rv=[];
对于(var m;m=re.exec;rv.push(m));
返回rv;
}
var s=“XabcdfX是xxxxxxx。has xxxxx。abcdf是xxxxxxx。zxabcdf abcdf。”
var tags=collect(s,/]*>/g);
var匹配=收集(s,/abcdf/g);
日志(“输入:”,s)
var r=s
匹配:for(变量i=0,j=0;imend)
继续比赛
如果(tbeg>mbeg)
断开标签
}
r=r.substr(0,mbeg)+m[0]。toUpperCase()+r.substr(mbeg+m[0]。长度)
}
日志(“结果:”,r)
var collect=函数(s,re)
{
var rv=[];
对于(var m;m=re.exec;rv.push(m));
返回rv;
}
var s=“XabcdfX是xxxxxxx。has xxxxx。abcdf是xxxxxxx。zxabcdf abcdf。”
var tags=collect(s,/]*>/g);
var匹配=收集(s,/abcdf/g);
日志(“输入:”,s)
var r=s
匹配:for(变量i=0,j=0;imend)
继续比赛
如果(tbeg>mbeg)
断开标签
}
r=r.substr(0,mbeg)+m[0]。toUpperCase()+r.substr(mbeg+m[0]。长度)
}
日志(“结果:”,r)
这个问题没有任何意义。与Switz不同,我认为这个问题非常清楚,但我想看看您到目前为止都尝试了什么。另外,如果输入字符串有类似“数字3<5.abcdf但6>2”的内容,该怎么办这个问题看起来像另一个问题:这个问题没有任何意义。与Switz不同,我认为这个问题非常清楚,但我想看看您到目前为止尝试了什么。另外,如果输入字符串有类似“数字3<5.abcdf但6>2”的内容,该怎么办。这个问题看起来像另一个问题:
var collect = function (s, re)
{
var rv = [];
for (var m; m = re.exec(s); rv.push(m));
return rv;
}
var s = "XabcdfX is xxxxxxx. <MabcdfM> has xxxxx. abcdf is xxxxxxx. <FabcdfF> zxabcdf abcdf."
var tags = collect(s, /<[^>]*>/g);
var matches = collect(s, /abcdf/g);
console.log("INPUT:", s)
var r = s
MATCH: for (var i = 0, j = 0; i < matches.length; ++i) {
var m = matches[i]
var mbeg = m.index
var mend = mbeg + m[0].length
TAG: for (; j < tags.length; ++j) {
var t = tags[j]
var tbeg = t.index
var tend = tbeg + t[0].length
if (tend < mbeg)
continue TAG
if (tbeg < mbeg && tend > mend)
continue MATCH
if (tbeg > mbeg)
break TAG
}
r = r.substr(0, mbeg) + m[0].toUpperCase() + r.substr(mbeg + m[0].length)
}
console.log("RESULT:", r)