var str = "<span>vvv</span>";
alert(str.replace(/<\/?(?!div\b|span\b)(\w*?)\s*[^>]*>.*?<\/\s*\1\s*>/g,''));这个是开始的  
之后我加了个限定符号
var str = "<span>vvv</span>";
alert(str.replace(/<\/?(?!div\b|span\b)(\w*?)\s*[^>]*>(.*?<\/\s*\1\s*>)?/g,''));这样匹配的结果跟上面的就不一样了why??

解决方案 »

  1.   

    因为'?'是出现0次或1次. 如果你第二种定义了, 那么作为</span>是符合正则的
      

  2.   

    </script>这个字符串是完全符合加括号前的匹配的, 后面的规则由于可有可无所以就...
      

  3.   


    我就打你说的.*?被无视掉了var str = "<span>vvv</span>";
    alert(str.replace(/<\/?(?!div\b|span\b)(\w*?)\s*[^>]*>(vvv<\/\s*\1\s*>)?/g,''))
    那我现在不用.*?  直接用vvv
    为什么vvv没有替换掉  后面的</span>被替换掉了
      

  4.   

    是啊, 因为你前面找的是匹配字符串, <\/?(?!div\b|span\b)(\w*?)\s*[^>]*> 这个规则, 只有</script>满足呀, 于是</script>被替换掉了