日期:2014-05-16  浏览次数:20490 次

Regular Expression(replace 'BC' but not replace 'ABC')
本帖最后由 benwu1210 于 2013-12-03 20:25:01 编辑
在javascript里  我目前使用Regular Expression
data = data.replace(/BC/g, "SS").replace(/DE/g, "TT") 
把全部的「BC」replace成「SS」
且全部的「DE」replace成「TT」

但进一步的想
把全部的「BC」replace成「SS」,但若「BC」前面一个字是「A」则维持不变
且全部的「DE」replace成「TT」,但若「DE」後面一个字是「F」则维持不变

如下
处理前NVBCSPOTABCBSMKBDEVSDEFER
处理後NVSSSPOTABCBSMKBTTVSDEFER

请问该如何处理呢?

------解决方案--------------------
var a='NVBCSPOTABCBSMKBDEVSDEFER';
a=a.replace(/.BC/g,function(x){
if(x.indexOf('A')==0){
return x;
}else{
return x.substring(0,1)+'SS';
}
}).replace(/DE(?!F)/g,'TT');
alert(a=='NVSSSPOTABCBSMKBTTVSDEFER');
这样试试
------解决方案--------------------
这个:

var data='NVBCSPOTABCBSMKBDEVSDEFER';
data = data.replace(/(?!A)BC/g, "SS").replace(/DE(?!F)/g, "TT");  //js不支持(?<!A) 零宽度负预测先行断言,不要用
alert(data);