1

我有一个要拆分的 javascript 字符串,但是在返回的数组的开头有一个空元素,我不知道为什么。

var split_in_el = in_el.split(/(#|\.|\[)/);

first其中split_in_el 是#last[color:red]

我得到的返回数组(在 Node.js 中,但没关系)是

.first //split_in_el
[ '', '.', 'first' ] //返回
#last //split_in_el
[ '', '#', 'last' ] //返回
[颜色:蓝色] //split_in_el
[ '', '[', 'color:blue]' ] //返回

这是一个显示问题的jsfiddle。

4

1 回答 1

3

这就是split()一般的工作方式,假设我们在 dot 上拆分以下内容.

Hello.World
     ^
----- -----

那么返回的数组将是:["Hello", "World"]

现在如果上一行是这样的:

    .World
    ^
  -- -----

然后我们得到一个这样的数组:["", "World"],该split()方法返回点之前的.所有内容和之后的所有内容.,这里点之前不存在任何内容,.因此它返回空字符串""

在一个更大的例子中:

.Hello.World.From.

它会返回:["", "Hello", "World", "From", ""].

现在,您的情况中令人困惑的部分不应该是如何获得空字符串,而是如何获得要在结果数组中拆分的字符。

例如,.当你在点.in周围分割时有一个点,当你在井号周围分割时.first有一个井号,等等。###last

当您查看方法的文档split()时,这会变得很明显:

如果 separator 是一个包含捕获括号的正则表达式,那么每次 separator 匹配时,捕获括号的结果(包括任何未定义的结果)都会拼接到输出数组中。

在您的情况下,分隔符是一个正则表达式/(#|\.|\[)/,匹配(或拆分)捕获组内的点.、磅符号#或冒号:,因此它们被添加到结果数组中。

/(#|\.|\[)/
 ^       ^
 ---------
 These parentheses are used to create the capturing group

您可以通过将捕获组转换为非捕获组来解决此问题,如下所示:

/(?:#|\.|\[)/
  ^^
Notice the syntax

最后我想补充一件事:在这样的情况下.first#last您可能不想使用split(),而是RegExp.exec()使用String.match()给定模式查找特定匹配项。

例如,如果你想在一个.字符之后检索单词,.first那么你可以这样做:

var matches = ".first".match(/\.\w+/);
于 2013-10-19T11:30:30.990 回答