javascript - 求助!关于js中正则分组的问题。
伊谢尔伦
伊谢尔伦 2017-04-11 10:51:38
[JavaScript讨论组]
代码功能是检测一个html元素中是否包含某个类,但是在使用正则的过程中我就是不理解为什么要加分组,分组的作用是什么,以及在这里是怎么去匹配的,如果没加分组会如何?
我试过了,如果不加分组,匹配是不正确的。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>测试</title>
        <script type="text/javascript">
            window.onload=function(){
                var box=document.getElementById('box');
                
                //检测类是否存在
                function hasClass(element,cName){
                    alert(!!element.className.match(new RegExp('(\\s|^)'+cName+'(\\s|$)')));
                }
                //调用
                hasClass(box,'bb');        //false
                hasClass(box,'bbb');        //true
            }
        </script>
    </head>
    <body>
    <p id="box" class="bbb aaa">测试</p>
    </body>
</html>

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(2)
高洛峰
function hasClass(element, cName) {
  return (' ' + element.className + ' ').indexOf(' ' + cName + ' ') > -1;
}

推荐这样写,兼容ie6+


不分组,生成的正则是 s|^bbbs|$ 意思是匹配 s 或 ^bbbs 或结束这3种情况,除非你的class是空或只有bbb才能匹配。
分组,生成的正则是 (s|^)bbb(s|$) 意思是匹配 空格或开头,然后是bbb,然后是空格或结束,这三部分组成的四种情况。

class="bbb ccc" 是 ^bbbs 的组合匹配到的
class="aaa bbb" 是 sbbb$ 的组合匹配到的
class="aa bbb cc" 是 sbbbs 匹配的
class="bbb" 是 ^bbb$ 匹配的

大家讲道理

不知道哦,好有创意的写法,我都没这么想过。 (\s|^)应该是说 空白或者开头 后面那个是说 空白或者结尾,太有材了。
这个东西正常人是这样写的:

function hasWord($need, $string) {
    return (new RegExp('\\b' + $need + '\\b')).test($string); // \b表示单词间隔
}
alert(hasWord('bbb', 'bbb aa')); //true
alert(hasWord('bbb', 'bbbaa')); //false
alert(hasWord(element.className, 'bbb')); // <- 结合你的例子中的用法。原文是hasClass(box, 'bbb'),真无法理解,直接把box.className传进去不就行了吗,好2.

其实你也就看明白了,这个写函数都没什么价值,本来就是一句话,封装函数变成好几行...

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号