【问题标题】:How do I get the starting and ending index of a highlighted piece of a string in Javascript?如何在Javascript中获取突出显示的字符串的开始和结束索引?
【发布时间】:2020-01-15 19:34:18
【问题描述】:

假设我在 Javascript 中有以下字符串

let str = "This is an example string";

假设我突出显示单词 example(例如在 Microsoft Word 中,当您想要将单词加粗或加下划线时),我如何在 Javascript 中的字符串 str 中获取该单词的开始和结束索引?如何获得值 11 和 17?

到目前为止,我尝试的一切都失败了,因为我无法获得这些索引。使用子字符串无济于事,因为您要么必须已经知道字符串的开始和结束索引,要么必须处理所选单词唯一的字符串。

上面的字符串将在一个内容可编辑的 div 中。

我应该补充一点,Javascript 通常不是我的强项,以防万一解决这个问题的方法太简单了。

【问题讨论】:

  • 研究indexOf并加6,因为您知道要查找的单词的长度
  • 我有,但这只会返回所选部分的第一次出现。但是,通常情况下,所选单词在字符串中可能不是唯一的,所以如果 e. G。它的第二个出现被选中,然后我会得到第一个。上面的例子真的只是一个例子,我正在寻找一个通用的解决方案。
  • 查看在循环中使用 indexOfsecond 参数 - 它在您声称已阅读的文档中
  • 哦,等等……你想要一个可内容编辑的 div 中选定字符串的索引吗?这与内容是字符串的 javascript 变量有什么关系?
  • 这只是为了减少问题的核心。在我正在寻找的函数中,我可以将 div 的内容放入一个变量中,对其进行修改并将其放回原处。但是,由于我不知道如何提出一个通用的解决方案,我不知道这是否可行。

标签: javascript indexing substring selection


【解决方案1】:

虽然您可以尝试在字符串中获取单词的开始和结束索引,但将您的单词替换为搜索词本身可能会更容易,并包含在 HTML 标记中,该标记会为您突出显示该单词。为此,您可以使用.replace() 和您的单词的正则表达式来替换字符串中出现的所有给定单词:

let str = "This is an example string and this is the word example again  xxexamplexx";
let word = "example";

str = str.replace(new RegExp(word, 'g'), `<span class="highlight">${word}</span>`);
console.log(str);

document.body.innerHTML = str;
.highlight {
  background: yellow;
}

上面将突出显示单词"example" 的任何出现,即使它不是独立的(例如:xxxexamplexxx)。要仅匹配独立出现的示例,您可以修改正则表达式以使用单词边界 (\b)

let str = "This is an example string and this is the word example again  xxexamplexx";
let word = "example";

str = str.replace(new RegExp('\\b'+word+'\\b', 'g'), `<span class="highlight">${word}</span>`);
console.log(str);

document.body.innerHTML = str;
.highlight {
  background: yellow;
}

【讨论】:

  • 我正要评论使用\\b,但在评论之一中说选择取决于用户,所以它可以是任何随机字符串,无论如何+1
【解决方案2】:

您可以使用indexOf

 let str = "This is an example string";
 console.log(str.indexOf("example")) // Would return 11

返回结束索引看看这个问题:JavaScript indexOf from end of search string

【讨论】:

  • 我知道,但通常选定的单词(或部分)在给定的字符串中不是唯一的,所以在这种情况下,我总是会得到第一次出现,或者至少知道要开始的索引搜索,以便选定的单词成为第一个出现。
  • 您没有提到要选择特定出现的单词。你怎么知道要突出显示哪个事件?您可能想使用lastIndexOf
  • 不是我会突出一个词,而是一个用户。我的程序需要做的是获取用户选择的开始和结束索引。顺便说一句,我没有投反对票。
  • 哦,这就是你的意思。尼克的答案应该是你要找的。​​span>
  • @AlexM nicks answer 将为您的用例指引正确的方向
猜你喜欢
  • 2011-02-18
  • 2020-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多