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

寻求匹配单个单词的TipTap InputRule正则表达式解决方案

实现TipTap自动用标签包裹单词的InputRule方案

要实现输入文本时自动给单个单词添加<w>标签,关键是编写正确的InputRule正则和处理逻辑,避免空格被吞或文本合并的问题。

正确的自定义节点代码

import { Node } from '@tiptap/core'

export const WordNode = Node.create({
  name: 'word',
  group: 'inline',
  inline: true,

  parseHTML() {
    return [{ tag: 'w' }]
  },

  renderHTML({ HTMLAttributes }) {
    return ['w', HTMLAttributes, 0]
  },

  addInputRules() {
    return [
      this.inputRule({
        // 匹配行首或空格后的单词,以及末尾的空格
        regex: /(?:^|\s)([^\s]+)\s$/,
        // 替换逻辑:生成<w>节点并保留空格
        replace: (match) => [
          { type: this.type, content: match[1] },
          ' ',
        ],
      }),
    ]
  },
})

注册到编辑器

import { Editor } from '@tiptap/core'
import StarterKit from '@tiptap/starter-kit'
import { WordNode } from './extensions/ext-wordnode.js'

const editor = new Editor({
  element: document.querySelector('.editor'),
  extensions: [StarterKit, WordNode],
})

之前正则的问题分析

  • /\b\w+\b\s$/:\b边界匹配在非纯英文场景可能失效,且未明确区分单词和空格,替换时易丢失空格导致文本合并。
  • /\b([^\s]+)\b$/g:全局标志g不适用于InputRule,且未匹配空格,触发时机错误(未输入空格就触发)。
  • /\b([^\s]+)(?:\b)\s$/:未在替换逻辑中保留空格,导致空格被吞,需要手动在替换时补充空格。

核心逻辑说明

  1. 正则/(?:^|\s)([^\s]+)\s$/确保在用户输入空格完成一个单词时触发规则,匹配行首或空格后的单词,以及末尾的空格。
  2. 替换时将捕获到的单词生成<w>节点,同时保留空格,避免后续输入的文本和已有单词合并。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 03:15:46