1

我想_#current selected text#_在当前选择的文本周围移动标记。所以让我们看一个例子。

  1. 第 1 步:仍然没有选择文本,所以字符串是:

    let stringVal = "Hello friends, let's program with javascript";


  1. 第 2 步: Hello friends已选择,因此字符串为:

    stringVal = "_#Hello friends#_, let's program with javascript";


  1. 第 3 步: Hello friends, let's已选择,因此字符串为:

    stringVal = "_#Hello friends, let's#_ program with javascript";

    如您所见,此处let's添加到选择文本中,因此标记的末尾#_移动ahead到相同大小的, let's.


  1. 第 4 步: with已选择,因此字符串为:

    stringVal = "_#Hello friends, let's#_ program _#with#_ javascript";

    可以看到,这里with单独标记为_#with#_,因为它既不附在前文也不附在下文


  1. 第 5 步: gram with javascript已选择,因此字符串为:

    stringVal = "_#Hello friends, let's#_ pro_#gram with javascript#_";

    如您所见,这里gram添加了之前 with,所以起始标记_#移动back到相同大小gram,另一方面javascript添加之后 with,所以结束标记#_移动ahead到相同大小javascript


  1. 第 6 步: let's program已选中,因此字符串为:

    stringVal = "_#Hello friends, #_ _#let's program#_ _#with javascript#_";

    这一步很复杂,如您所见,这里let's在 afterbeforegram 重新选择pro添加,所以起始标记移动到前面,结束标记移动到后面。另外我们应该小心,因为它没有结束标记,所以我们必须添加,也没有,所以我们必须添加。 let's gram_#back let's#_ahead gram_#Hello friends,_#Hello friends, #_with javascript#_starter mark_#with javascript#_


  1. 第 7 步: let's program with javascript已选择,因此字符串为:

    stringVal = "_#Hello friends, let's program with javascript#_";

    这一步很简单,如您所见all textselected我们只需标记一次。

我做了什么:

let stringVal = "Hello friends, let's _#program#_ with _#javascript language#_";
stringVal = stringVal.trim().replace(/\s+/g, ' ');
const search = 'Hello friends'.trim().replace(/\s+/g, ' ');
console.log('before: ', stringVal);
let copyString = stringVal;
copyString = copyString.replace(/_#(\w+(?: \w+)*)#_/g, "$1");
copyString = copyString.replace(search, `_#${search}#_`);
console.log('aafter: ', copyString);

上面的代码结果是:_#Hello friends#_, let's program with javascript language.

正确的一个是:_#Hello friends#_, let_'s _#program#_ with _#javascript language#_

在这里我找不到稳定的解决方案,在我的解决方案中它删除了所有以前的样式,并且样式再次仅适用于当前选定的文本。

但是我想保存之前选择的文本的状态并添加新的样式,如果有任何重叠,那么它将被覆盖。

另外,如果有图书馆可以做这件事,你可以建议我

我的最后一次尝试

我曾经尝试保存所有标记样式的索引,然后将其与当前选定文本的索引进行比较,但它也没有响应,代码在这里。

4

0 回答 0