用正则表达式将JavaScript拆分为空,返回数组。手动删除或正则表达式删除?

时间:2018-01-02 00:36:02

标签: javascript regex

我已经使用.split()数十次将字符串转换为数组。这是我第一次收到意外结果。这里,split返回一个空字符串数组。这很奇怪,因为字符串中没有空格被拆分。

是否有正则表达式方法可以避免这种新的意外结果,或者只需要用新的代码行删除它们?

let infix = "(A+B)*C";

let infixArr = infix.split(/(\W)/g);
console.log(infixArr);

Yields -- > [ '', '(', 'A', '+', 'B', ')', '', '*', 'C' ]
Expected --> [ '(', 'A', '+', 'B', ')', '*', 'C' ]

3 个答案:

答案 0 :(得分:3)

问题是彼此相邻有多个分隔符,因此它们之间的字符串为空。您可以使用filter过滤空字符串:

"(A+B)*C".split(/(\W)/g).filter(c => c !== ''); 
//=> ["(", "A", "+", "B", ")", "*", "C"]

答案 1 :(得分:2)

出现空字符串,因为\W正在拆分任何非单词字符,其中包括括号:第一个是分隔空字符串和A.第二个字符串是另一个非单词字符, *,因此是第二个空字符串,用于它们之间的空白区域。

然后根据spec将非单词字符拼接回结果数组中:

  

如果separator是包含捕获的正则表达式   括号,然后每次分隔符匹配,结果   捕获括号的(包括任何未定义的结果)是   拼接到输出数组中。但是,并非所有浏览器都支持此功能   能力。

如果您只想分成其组成字符,为什么不只是打电话给infix.split('')

答案 2 :(得分:1)

使用split方法,当字符串以分隔符开头或以分隔符结尾时,您将有空字符串,或者两个分隔符之间没有任何内容,如注释@mdatsev。您可以使用String.match方法和正则表达式\W|\w+来提取所需的模式:



let infix = "(A+B)*C";

console.log(
  infix.match(/\W|\w+/g)
)