您好我正在尝试使用正则表达式拆分字符串,但结果与我的预期不同。
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$"]
答案 0 :(得分:2)
我认为您不能使用 (是的,您可以),但您可以使用split
来执行此操作match
全球旗帜和交替:
var result = text.match(/\$blank\$.\$blank\$|./g);
Visual Regex Explanation,基本上它匹配$blank$X$blank
或单个字符。如果可以的话,它将采用第一种替代方案,然后只使用第二种方法。
答案 1 :(得分:2)
这与the docs建议一样:
如果separator是包含捕获括号的正则表达式,则每次匹配时,捕获括号的结果(包括任何未定义的结果)都会拼接到输出数组中。
捕获括号只包含第一个$blank$
,因此包含在数组中。
如果您想要包含整个拆分字符串,则需要:
text.split(/(\$blank\$.\$blank\$)/)
["p", "$blank$a$blank$", "l", "$blank$a$blank$", "c", "$blank$e$blank$", ""]
当split()
在字符串末尾找到分隔符时,结尾处的空字符串是预期的行为。