JS字符串拆分与正则表达式

时间:2016-10-01 23:38:31

标签: javascript regex split

我试图在某些特定的字符上拆分表达式。我知道我们可以使用带有正则表达式的String.split(),所以这是我的第一个猜测:



function expressionSplit([input]) {
    let regex = /([ (),;.]+)/g;
    let arr = input.split(regex);

    arr.forEach(item => console.log('item: ' + item));
}

expressionSplit(['let sum = 1 + 2;if(sum > 2){\tconsole.log(sum);}']);




现在这远远超出了我的预期,所以我做了一些阅读,发现与我不同的人使用正则表达式的split()没有问题。困惑,我试过这个:



function expressionSplit([input]) {
    let regex = /([ (),;.]+)/g;
    let arr = input.replace(regex, '|').split('|');

    arr.forEach(item => console.log('item: ' + item));
}

expressionSplit(['let sum = 1 + 2;if(sum > 2){\tconsole.log(sum);}']);




与我的期望相反 - 它主要起作用。为什么会这样?我希望它是某种JS典型的奇怪,因为它对我来说根本没有意义,而且,正如我所说的那样 - 其他人似乎正在使用带有正则表达式的split()而没有问题。另外我怎么能分开' \ t' (标签)。添加' \ t'正则表达式似乎什么都不做而且' \\ t'只匹配'。感谢。

1 个答案:

答案 0 :(得分:1)

没有" JS典型的奇怪"继续这里 - 这是所有记录的行为。如果你想抱怨JS奇怪,那你在派对上有点晚了......几年前,随着JavaScript的成长,它已经过时了。"

来自String#split的文档:

  

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

由于您正在使用分组运算符,因此您将在结果中获取分割标记以及正在分割的内容。如果删除拆分标记,它的行为与您最初预期的一样:

// old:     /([ (),;.]+)/g;
let regex = /[ (),;.]+/g;