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

正则表达式:匹配含表情符号的单词边界及带缩写的单词

解决正则匹配单词(含缩写)和表情符号的问题

我明白你现在的痛点:原来的正则抓不到表情符号,还得兼顾带撇号的缩写单词对吧?咱们来一步步搞定它。

原正则的问题分析

你之前用的/(?!'.*')\b[\w']+\b/g有两个核心问题:

  • \w只能匹配字母、数字和下划线,完全覆盖不了表情符号这类Unicode字符;
  • \b单词边界在处理非\w字符(比如表情、标点)时判断逻辑会失效,导致表情符号根本不会被识别为独立的“项”。

改进后的正则表达式

直接用这个正则就能满足你的需求:

const regex = /(?<!\S)(?:[\w']+|\p{Emoji})(?!\S)/gu;

正则各部分详解

咱们拆解一下每个部分的作用,方便你理解和调整:

  • (?<!\S):负向后行断言,确保当前匹配项的前面是空白字符或者字符串开头,相当于自定义的“单词起始边界”;
  • (?:[\w']+|\p{Emoji}):非捕获分组,包含两个可选匹配项:
    • [\w']+:匹配带撇号的单词(比如let's),保留你原来需要的缩写支持;
    • |\p{Emoji}:匹配单个表情符号,\p{Emoji}是Unicode属性转义,能覆盖绝大多数标准表情;
  • (?!\S):负向前瞻断言,确保当前匹配项的后面是空白字符或者字符串结尾,对应“单词结束边界”;
  • g:全局匹配模式,找出所有符合条件的项;
  • u:启用Unicode模式,让\p{Emoji}和Unicode字符的处理正常工作。

测试你的示例文本

用你的测试句子来验证:

const text = "Hey there! , let's go to the moon ";
const result = text.match(regex);
console.log(result);
// 输出:["Hey", "there", "", "let's", "go", "to", "the", "moon", "", ""]

完全符合你期望的结果!

额外调整建议

如果你的场景中需要把连续的表情符号当作一个整体(比如算一个项),只需要把\p{Emoji}改成\p{Emoji}+即可:

const regex = /(?<!\S)(?:[\w']+|\p{Emoji}+)(?!\S)/gu;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:36:55