JS字符串拆分使用正则表达式混淆

时间:2014-08-18 13:17:37

标签: javascript regex string split

您好我正在尝试使用正则表达式拆分字符串,但结果与我的预期不同。

var text = 'p$blank$a$blank$l$blank$a$blank$c$blank$e$blank$';
> text.split(/(\$blank\$).\1/g);
["p", "$blank$", "l", "$blank$", "c", "$blank$", ""]

我想要的是

["p", "$blank$a$blank$",l, "$blank$a$blank$", "c", "$blank$e$blank$"]

2 个答案:

答案 0 :(得分:2)

我认为您不能使用split来执行此操作 (是的,您可以),但您可以使用match全球旗帜和交替:

var result = text.match(/\$blank\$.\$blank\$|./g);

Visual Regex Explanation,基本上它匹配$blank$X$blank或单个字符。如果可以的话,它将采用第一种替代方案,然后只使用第二种方法。

Live Example

答案 1 :(得分:2)

这与the docs建议一样:

  

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

捕获括号只包含第一个$blank$,因此包含在数组中。

如果您想要包含整个拆分字符串,则需要:

text.split(/(\$blank\$.\$blank\$)/)
  

["p", "$blank$a$blank$", "l", "$blank$a$blank$", "c", "$blank$e$blank$", ""]

split()在字符串末尾找到分隔符时,结尾处的空字符串是预期的行为。

相关问题