如何在javascript中处理正则表达式边界的收缩

时间:2014-12-31 02:59:17

标签: javascript regex node.js word

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

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

几乎所有东西都匹配,除了没有收缩

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

但是,我不能只包含撇号,因为我希望匹配的撇号成为字边界:

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

是否有办法在将其他撇号视为单词边界时捕捉收缩?

2 个答案:

答案 0 :(得分:3)

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

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

见下文:

enter image description here

答案 1 :(得分:3)

您可以匹配字母和可能的撇号,后跟字母。

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