我有一个nodejs脚本,可读取文件并计算单词频率。我目前将每行输入一个函数:

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

这几乎匹配所有东西,除了错过收缩
getWords("I'm") -> {"I", "m"}

但是,我不能只包含撇号,因为我希望匹配的撇号成为单词边界:
getWords("hey'there'") -> {"hey", "there"}

有没有一种方法可以捕获收缩,同时仍将其他撇号视为单词边界?

最佳答案

我相信使用正则表达式可以得到的最接近的是line.match(/(?!'.*')\b[\w']+\b/g),但是请注意,如果单词和'之间没有空格,它将被视为收缩。

正如Aaron Dufour提到的那样,正则表达式本身无法知道I'm是收缩,而hey'there不是收缩。

见下文:

10-05 17:55