You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript正则词频统计:匹配单词内撇号、排除首尾撇号支持重音字符

解决方案

核心思路是通过正则直接捕获单词的有效部分,自动忽略首尾撇号,同时保留单词内部的撇号,兼容带变音符号的字符。

正则说明

你可以使用以下正则结构实现需求:

'*([A-Za-zÀ-ÖØ-öø-ÿ]+(?:['’][A-Za-zÀ-ÖØ-öø-ÿ]+)*)'*

各部分逻辑:

  • 首尾的'*匹配单词前后任意数量的撇号,不纳入最终有效单词内容
  • 捕获组()内是我们需要的有效单词:
    • [A-Za-zÀ-ÖØ-öø-ÿ]+ 匹配至少1个合法字符(包含英文字母和带变音符号的字符)
    • (?:['’][A-Za-zÀ-ÖØ-öø-ÿ]+)* 是非捕获组,匹配「撇号+合法字符」的组合,允许出现0次或多次,保证撇号只会出现在两个合法字符中间,不会出现在单词首尾

完整实现代码

const countWords = (text) => {
  const letterRange = 'A-Za-zÀ-ÖØ-öø-ÿ'
  const wordRegex = new RegExp(`'*([${letterRange}]+(?:['’][${letterRange}]+)*)'*`, 'g')
  const counts = {}
  let match

  while ((match = wordRegex.exec(text)) !== null) {
    // 如果需要区分大小写统计,删除.toLowerCase()即可
    const word = match[1].toLowerCase()
    counts[word] = (counts[word] || 0) + 1
  }
  return counts
}

// 测试用例
const testText = "it's a 'miracle' of nature"
console.log(countWords(testText))
// 输出:{ "it's": 1, a: 1, miracle: 1, of: 1, nature: 1 }

效果验证

对于你给出的测试文本it's a 'miracle' of nature,会正确统计为5个单词,'miracle'自动移除首尾撇号为miracle,it's保留内部撇号作为完整单词,完全符合预期。


内容的提问来源于stack exchange,提问作者Rodrigo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 03:45:06