.split(/ \ s + /)和.split("")之间的区别?

时间:2015-01-24 16:46:13

标签: javascript regex

:)首先,对不起我的英语:p 我正在看下一个js代码片段:

var classes = element.className.split(/\s+/);

该代码会将and class的完整类名拆分为包含每个类的数组......但是,使用.split(/\s+/)和使用.split(" ")之间有什么区别?我看到了同样的结果......

我使用Chrome中的下一个简单代码对此进行了测试:

<!DOCTYPE html>
<html>
<body>
    <div id="cono" class="clase1 clase2 clase3-xD">
    </div>
    <script>
        var d = document.getElementById("cono");
        console.log(d.className);
        var classes = d.className.split(" ");
        for (i in classes) {
            console.log(classes[i]);
        }
    </script>
</body>
</html>

无论我使用.split(" ")还是.split(/\s+/)

,我都会得到相同的结果
  

clase1 clase2 clase3-xD

     

clase1

     

clase2

     

clase3-XD

他们有任何相关的区别吗?

3 个答案:

答案 0 :(得分:9)

不,.split(/\s+/).split(" ")是不同的。 \s+匹配一个或多个空格字符,包括" "与单个水平空格字符匹配的换行符。因此.split(/\s+/)根据一个或多个空格字符拆分输入,.split(" ")根据单个空格拆分输入。

示例:

> "foo   bar".split(/\s+/)
[ 'foo', 'bar' ]
> "foo   bar".split(" ")
[ 'foo', '', '', 'bar' ]

答案 1 :(得分:8)

.split(“”)和.split(/ \ s + /)之间的区别是:

正则表达式" "

  • 字面上匹配空格字符。

正则表达式/\s+/

  • 在一个和无限时间之间匹配单个空白字符(制表符,换行符,回车符,垂直制表符,换页符)。 (贪婪)

短:

" "将数组拆分为一个空格字符 /\s/将数组拆分为各种空白字符
+在一个和无限制的时间之间匹配

答案 2 :(得分:1)

\s捕获比空格更多类型的空白

来自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions

匹配单个空格字符,包括空格,制表符,换页符和换行符。相当于[ \f\n\r\t\v​\u00a0\u1680​\u180e\u2000​\u2001\u2002​\u2003\u2004​\u2005\u2006​\u2007\u2008​\u2009\u200a​\u2028\u2029​​\u202f\u205f​\u3000]

此外+表示它将匹配多个空格。因此foo bar会产生不同的结果:

js> 'foo      bar'.split(' ')
["foo", "", "", "", "", "", "bar"]
js> 'foo      bar'.split(/\s+/)
["foo", "bar"]