使用 SlateJS 将选择范围扩展到当前单词

Expanding selection to the current word with SlateJS

使用 Slatejs (v0.47) 如何扩展当前选择(从折叠开始)以包含当前单词?

所以(假设[]表示当前节)

如果我从

开始
this is some te[]xt

如何以编程方式将选择范围扩大到

this is some [text]

?

最终成功了。

export const word_selection = (editor) => {
  const {value} = editor
  const {selection, startText} = value
  const {start, isExpanded} = selection

  if (isExpanded) {
    return value.fragment.text
  }
  const {text} = startText
  const {offset} = start
  let left = text.slice(0, offset).search(/\S+$/)
  if (left === -1) {
    // character before the cursor is a space, selection starts at the cursor
    left = offset
  }
  let right = text.slice(offset).search(/\s/)
  if (right < 0) {
    // character after teh cursor is a space, selection ends at the cursor
    right = text.length
  } else {
    right = right + offset
  }
  if (left === right) {
    // nothing to select
    return ''
  }
  editor.moveAnchorBackward(offset - left).moveFocusForward(right - offset)
  return value.fragment.text
}