为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式/(\w+)\1/g的意思

正则表达式/(\w+)\1/g的意思

ITMISS 2019-02-26 16:52:10
<!DOCTYPE html><html>    <head>        <meta charset="UTF-8">        <title></title>    </head>    <body>    </body></html><script>    var str1="13255aasfefewgggggead"    var str2="aabacd"    var re=/(\w+)\1/g    var re2=/(\w+)b\1/g    console.log(re.test(str2));    str1.replace(re,function($1,$2){        alert($1)//输出55,aa,fefe,gggg由此看出(\w+)\1--不管w+部分是几位值,只要\1的内容和w+部分是值相同就符合条件.问题1,我的推论想法对吗?    })    str2.replace(re,function($1,$2){        alert($1)//输出aa,符合上面推论    })    str2.replace(re2,function($1,$2){        alert($1)//输出aba;问题2:根据上面的推论这里实际上取值成功且为aba;改变str2=“aabaacd”这样取值为aabaa,但为什么不是输出aabaa,aba呢?    })</script>//.问题1,不管w+部分是几位值,只要1的内容和w+部分是值相同就符合条件;我的推论想法对吗?//问题2:根据上面的推论这里实际上取值成功且为aba;改变str2=“aabaacd”这样取值为aabaa,但为什么不是输出aabaa,aba呢?//问题3:/(w+)\1/g和/(w)+\1/g及/w\1+/g的区别?
查看完整描述

1 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

先解释一个问题:

\1 等于 () 中匹配的内容。


问题1,不管w+部分是几位值,只要1的内容和w+部分是值相同就符合条件;我的推论想法对吗?

少了括号, 不论(\w+)中有几位。


问题2:根据上面的推论这里实际上取值成功且为aba;改变str2=“aabaacd”这样取值为aabaa,但为什么不是输出aabaa,aba呢?

str2 = "aabacd" 时, /(w+)b1/g 匹配 aba。

但是当 str2 = "aabaacd" 时, /(w+)b1/g 就只匹配 aabaa 了,不会再重复匹配 aba。 这是约定,没有为什么。


str2 = "aaabaaacd" 时,只匹配 aaabaaa。


问题3:/(w+)1/g和/(w)+1/g及/w1+/g的区别?

这三个例子不好解释,我们把 b 加上。我们来解释 /(\w+)b\1/g 和 /(\w)+b\1/g 的区别。

区别主要是 \1 的值,因为 \1 等于括号()中的值。最开始的地方写了。


"aabaac".replace(/(\w+)b\1/g, function(value1, value2) {

    // value1="aabaa" 因为 \1 = "aa"

})


"aabaac".replace(/(\w)+b\1/g, function(value1, value2) {

    // value1="aaba" 因为 \1 = "a"

})

至于 /w1/g 因为没有括号(),所以 1 没有值。


"aabaac".replace(/(\wb\1/g, function(value1, value2) {

    // value1 没有值

})


查看完整回答
反对 回复 2019-03-04
  • 1 回答
  • 0 关注
  • 595 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号