50分的一个正则问题 正则javascriptstring 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 var str ='javascriptmm haha ,test string mmmmmmmmmmm 有很多mm,但只匹配连续的两个m';document.write(str.replace(/([^m])(mm)\b/g, '$1<b>$2</b>'));javascript<b>mm</b> haha ,test string mmmmmmmmmmm 有很多<b>mm</b>,但只匹配连续的两个m var str ='javascriptmm haha ,test string mmmmmmmmmmm 有很多mm,但只匹配连续的两个m';document.write(str.replace(/(^|[^m])mm(?!m|$)/g, '$1{替换的内容}')); 对了,我要匹配的只有两个m, 结果就是mm 不是整个串。 而且 :有且仅有两个连续的m 我好像没说明白补冲下: 查询有且仅有两个连续的m。 我要匹配的只有两个m, 结果就是mm 不是整个串。 而且 :有且仅有两个连续的m <script> var str ='javascriptmm haha ,test string mmmmmmmmmmm 有很多mm,但只匹配连续的两个m'; document.write(str.replace(/(mm(?!m))/g, '$1{替换的内容}')); </script>看一眼 <script> var str ='javascriptmm haha ,test string mmmmmmmmmmm 有很多mm,但只匹配连续的两个m'; document.write(str.replace(/((?:[^m+])mm(?!m))/g, '$1{替换的内容}')); </script>那个,不好意思,之前那个没考虑前边,光考虑后边了,呵呵,补充一下,呵呵。 <script> var str ='javascriptmm haha ,test string mmmmmmmmmmm 有很多mm,但只匹配连续的两个m'; document.write(str.replace(/((?:[^m]+)mm(?!m))/g, '$1{替换的内容}')); </script>好吧,这是最后一次, 这个还是不正确啊,大神!你已经把不是mm的也匹配上了这个东西是这样,把 /((?:[^m]+)mm(?!m))/g 改成 /((?:[^m]*)mm(?!m))/g 就行了,至于你说的把不是mm的也匹配,是因为你mm之前不能再有m了啊,(?:[^m]*)这部分是非捕获分组,可以理解为参与正则匹配,但是不会被捕获, (?!m)属于正则的零宽断言,也是不会被捕获的<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /></head><body><script>var str ='mmjavascriptmm haha ,test string mmmmmmmmmmm 有很多mm,但只匹配连续的两个m';document.write(str.replace(/((?:[^m]*)mm(?!m))/g, '$1{替换的内容}'));</script></body></html>执行结果 :mm{替换的内容}javascriptmm{替换的内容} haha ,test string mmmmmmmmmmm{替换的内容} 有很多mm{替换的内容},但只匹配连续的两个m 其实,我很尴尬,用这个吧,上边那个忘记考虑mmmmmmm的情况了<script>var str ='mmjavascriptmm haha ,test string mmmmmmmmmmm 有很多mm,但只匹配连续的两个m';document.write(str.replace(/((?:[^m]+|^)([m]{2})(?!m))/g, '$1{替换的内容}'));</script> 确实mmmmmmmmmmm{替换的内容}就是出问题了。或许我们简单的来匹配好了:<script type="text/javascript"> var str ='mmjavascriptmm haha ,test string mmmmmmmmmmm 有很多mm,但只匹配连续的两个mm'; document.write(str.replace(/(m+)/g,function(a){ return a.length==2?"{匹配}":a; }));</script> 这个还是不正确啊,大神!你已经把不是mm的也匹配上了这个东西是这样,把 /((?:[^m]+)mm(?!m))/g 改成 /((?:[^m]*)mm(?!m))/g 就行了,至于你说的把不是mm的也匹配,是因为你mm之前不能再有m了啊,(?:[^m]*)这部分是非捕获分组,可以理解为参与正则匹配,但是不会被捕获, (?!m)属于正则的零宽断言,也是不会被捕获的<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /></head><body><script>var str ='mmjavascriptmm haha ,test string mmmmmmmmmmm 有很多mm,但只匹配连续的两个m';document.write(str.replace(/((?:[^m]*)mm(?!m))/g, '$1{替换的内容}'));</script></body></html>执行结果 :mm{替换的内容}javascriptmm{替换的内容} haha ,test string mmmmmmmmmmm{替换的内容} 有很多mm{替换的内容},但只匹配连续的两个m 不正确:1 要把mm替换掉,2、mmmmmmmmmm这个是不符合的 看来csdn不行啊,我在osc里,5个答案就有3个是正确的。 几位版主及xzy21com 给出的答案很不错,当然ivyandrich一直试图帮助我解决问题,十分感激啊!我这里有几个正确的:1、 ((?!m).|^)mm(?!m) 替换成 $1连上你要替换的内容,比如$1kk2、 str = str.replace(/((?!m).|^)(mm)(?!m)/g, function($0, $1, $2) { return '@'; });3、var reg=new RegExp('([^m]|^)m{2}([^m])',"gm"); out=str.replace(reg,"$1找到了$2");4、str = str.replace(/(m{2})/g, function($0, strTmp, index){ if(str.charAt(index+2) != 'm' && (index > 0 ? (str.charAt(index-1 ) != 'm' ) : true) ){ return '@'; }else{ return $0; }});5、xzy21com给出的答案 获取iframe里面的HTML代码 关于iframe加载的页面js只作用于加载的页面,jquery的笼罩层不是全局 如何写正则表达式匹配html标签 点击小图片按钮,栏目切换,并带有链接,请求高手指点迷津! 都进来看看,求求各位,让点击过的链接变成灰色 jsp+js代码求助 当我点按扭时显示我CHECKBOX选种的值 100在线结贴!设计一个按钮,按下去后按钮的字体变红色。我设计的函数哪里出问题了?如何修改? 小问题,如何比较两个日期的大小(1982-3)(年-月) 急!!javascript中有没有判断输入是否为数字的方法??? 怎么隐藏ie窗口? Struts2 Action参数问题
document.write(str.replace(/([^m])(mm)\b/g, '$1<b>$2</b>'));
javascript<b>mm</b> haha ,test string mmmmmmmmmmm 有很多<b>mm</b>,但只匹配连续的两个m
var str ='javascriptmm haha ,test string mmmmmmmmmmm 有很多mm,但只匹配连续的两个m';
document.write(str.replace(/(^|[^m])mm(?!m|$)/g, '$1{替换的内容}'));
我好像没说明白补冲下: 查询有且仅有两个连续的m。 我要匹配的只有两个m, 结果就是mm 不是整个串。 而且 :有且仅有两个连续的m
var str ='javascriptmm haha ,test string mmmmmmmmmmm 有很多mm,但只匹配连续的两个m';
document.write(str.replace(/(mm(?!m))/g, '$1{替换的内容}'));
</script>
看一眼
var str ='javascriptmm haha ,test string mmmmmmmmmmm 有很多mm,但只匹配连续的两个m';
document.write(str.replace(/((?:[^m+])mm(?!m))/g, '$1{替换的内容}'));
</script>
那个,不好意思,之前那个没考虑前边,光考虑后边了,呵呵,补充一下,呵呵。
var str ='javascriptmm haha ,test string mmmmmmmmmmm 有很多mm,但只匹配连续的两个m';
document.write(str.replace(/((?:[^m]+)mm(?!m))/g, '$1{替换的内容}'));
</script>
好吧,这是最后一次,
这个还是不正确啊,大神!你已经把不是mm的也匹配上了这个东西是这样,把 /((?:[^m]+)mm(?!m))/g 改成 /((?:[^m]*)mm(?!m))/g 就行了,至于你说的把不是mm的也匹配,是因为你mm之前不能再有m了啊,(?:[^m]*)这部分是非捕获分组,可以理解为参与正则匹配,但是不会被捕获, (?!m)属于正则的零宽断言,也是不会被捕获的<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /></head>
<body>
<script>
var str ='mmjavascriptmm haha ,test string mmmmmmmmmmm 有很多mm,但只匹配连续的两个m';
document.write(str.replace(/((?:[^m]*)mm(?!m))/g, '$1{替换的内容}'));
</script>
</body>
</html>
执行结果 :mm{替换的内容}javascriptmm{替换的内容} haha ,test string mmmmmmmmmmm{替换的内容} 有很多mm{替换的内容},但只匹配连续的两个m
<script>
var str ='mmjavascriptmm haha ,test string mmmmmmmmmmm 有很多mm,但只匹配连续的两个m';
document.write(str.replace(/((?:[^m]+|^)([m]{2})(?!m))/g, '$1{替换的内容}'));
</script>
或许我们简单的来匹配好了:<script type="text/javascript">
var str ='mmjavascriptmm haha ,test string mmmmmmmmmmm 有很多mm,但只匹配连续的两个mm';
document.write(str.replace(/(m+)/g,function(a){
return a.length==2?"{匹配}":a;
}));
</script>
这个还是不正确啊,大神!你已经把不是mm的也匹配上了这个东西是这样,把 /((?:[^m]+)mm(?!m))/g 改成 /((?:[^m]*)mm(?!m))/g 就行了,至于你说的把不是mm的也匹配,是因为你mm之前不能再有m了啊,(?:[^m]*)这部分是非捕获分组,可以理解为参与正则匹配,但是不会被捕获, (?!m)属于正则的零宽断言,也是不会被捕获的<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /></head>
<body>
<script>
var str ='mmjavascriptmm haha ,test string mmmmmmmmmmm 有很多mm,但只匹配连续的两个m';
document.write(str.replace(/((?:[^m]*)mm(?!m))/g, '$1{替换的内容}'));
</script>
</body>
</html>
执行结果 :mm{替换的内容}javascriptmm{替换的内容} haha ,test string mmmmmmmmmmm{替换的内容} 有很多mm{替换的内容},但只匹配连续的两个m 不正确:1 要把mm替换掉,2、mmmmmmmmmm这个是不符合的
2、 str = str.replace(/((?!m).|^)(mm)(?!m)/g, function($0, $1, $2) { return '@'; });
3、var reg=new RegExp('([^m]|^)m{2}([^m])',"gm"); out=str.replace(reg,"$1找到了$2");
4、str = str.replace(/(m{2})/g, function($0, strTmp, index){
if(str.charAt(index+2) != 'm' && (index > 0 ? (str.charAt(index-1 ) != 'm' ) : true) ){
return '@';
}else{
return $0;
}
});
5、xzy21com给出的答案