我如何处理JavaScript中的正则expression式边界的收缩

我有一个nodejs脚本读入一个文件并计算词频。 我目前每行都进入一个函数:

function getWords(line) { return line.match(/\b\w+\b/g); } 

这匹配几乎所有东西,除了它忽略了收缩

 getWords("I'm") -> {"I", "m"} 

然而,我不能只包括撇号,因为我想要匹配的撇号是字的边界:

 getWords("hey'there'") -> {"hey", "there"} 

有没有一种方法来捕捉收缩,同时仍然把其他撇号作为单词边界?

我相信你可以用正则expression式得到最接近的将是line.match(/(?!'.*')\b[\w']+\b/g)但是请注意,如果一个单词和一个' ,它会被视为收缩。

正如Aaron Dufour所提到的那样,正则expression式本身就没有办法知道I'm是一个收缩,但是hey'there没有。

见下文:

在这里输入图像描述

你可以匹配字母和一个可能的撇号后跟字母。

 line.match(/[A-Za-z]+('[A-Za-z]+)?/g 
Interesting Posts