js正则问题,不知难倒了多少正则高手

一路走来__ 发布于 2014/04/22 16:49
阅读 872
收藏 2

直接上问题:

var str ='mmjavascriptmm haha ,test string mmmmmmmmmmm 有很多mm,但只匹配连续的两个m';

要匹配的只有两个m, 把它们替换了。 而且 :有且仅有两个连续的m。

上面这个串有只三处符合要求,你应该看得出,但不一定写得出这个正则啊

加载中
0
aiasfina
aiasfina


str.replace(/((?!m).|^)(mm)(?!m)/g, function($0, $1, $2) { return '@'; });

osc js 一堆错,把我的调试代码顶走了,无力吐槽




0
CloudArchitect
CloudArchitect
CloudArchitect
该评论暂时无法显示,详情咨询 QQ 群:点此入群
0
一路走来__

引用来自“程序猿可爱多”的评论

(mm)[^m]

如果你先测下就不会这么写了,明显你匹配了四处!
aiasfina
aiasfina
回复 @程序猿可爱多 : js不支持负后查...
CloudArchitect
CloudArchitect
(?<!m)mm(?!m) 这个 刚才写的着急了 写完就发现有问题
0
Arrowing
Arrowing

var str ='mmjavascriptmm haha ,test string mmmmmmmmmmm 有很多mm,但只匹配连续的两个m'; 

str = str.replace(/(m{2})/g, function($0, strTmp, index){
    if(str.charAt(index+2) == 'm'){
      return $0;
    }else{
      return 123;
    }
});

alert(str);


自己扩展咯

0
freesnow
freesnow
该评论暂时无法显示,详情咨询 QQ 群:点此入群
0
yak
yak

var reg=new RegExp('([^m])m{2}([^m])',"gm");
out=str.replace(reg,"$1$2");




0
一路走来__

引用来自“arrowing”的评论

var str ='mmjavascriptmm haha ,test string mmmmmmmmmmm 有很多mm,但只匹配连续的两个m'; 

str = str.replace(/(m{2})/g, function($0, strTmp, index){
    if(str.charAt(index+2) == 'm'){
      return $0;
    }else{
      return 123;
    }
});

alert(str);


自己扩展咯

这个很接近了,不过你只是结决了这个实际问题,但类似的普遍问题你没有正确解决。不过你的if稍微改动下就正确了。
0
一路走来__

引用来自“freesnow”的评论


((?!m).|^)mm(?!m)

替换成

$1连上你要替换的内容,比如$1kk


很难理解你这前面的((?!m).|^)
0
一路走来__

引用来自“aiasfina”的评论


str.replace(/((?!m).|^)(mm)(?!m)/g, function($0, $1, $2) { return '@'; });

osc js 一堆错,把我的调试代码顶走了,无力吐槽




正确
0
一路走来__

引用来自“yak”的评论


var reg=new RegExp('([^m])m{2}([^m])',"gm");
out=str.replace(reg,"$1$2");




不正确:改成([^m]|^)m{2}([^m])就可以了
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部