首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据起始位置和结束位置突出显示字符串中的子字符串。

根据起始位置和结束位置突出显示字符串中的子字符串。
EN

Stack Overflow用户
提问于 2014-11-10 07:58:02
回答 2查看 458关注 0票数 1

给定一个字符串作为输入。假设“风扇叶片的前缘凸起”。单击按钮将字符串传递给服务器,服务器返回一个JSON对象

代码语言:javascript
复制
{
  "result": [
    {
      "name": "blade",
      "startPos": 12,
      "endPos": 17

    },
    {
      "name": "bulged",
      "startPos": 44,
      "endPos": 50 
    }
  ]
}

现在我必须高亮显示输入字符串中的两个单词‘刀片’和‘凸起’,并将它们显示为输出。

输入:“风扇叶片的前缘凸起”

预期输出:风扇叶片的主要叶片边缘是凸起的

我总是可以匹配单词并使用Regex高亮显示它们,但是它将突出显示输入字符串中的“刀片”两种情况。

在JavaScript中是否有任何方法可以根据位置识别字符串并突出显示它们。

非常感谢你的帮助。

给我们我的小提琴

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-10 08:13:58

使用JS string方法substring查找字符串的相关部分。在这种情况下,由于必须为突出显示添加标记,所以希望在目标单词之前和之后查找子字符串。

然后酌情添加高亮显示,使用<strong>或类似的东西。见下面的例子。

您需要在obj.result上循环,同时考虑到添加像<strong>这样的标记会改变后面单词的起始索引。您可以考虑用字符串末尾的单词开始突出显示,以避免索引的复杂性。为此,请按startPos对列表进行降序排序,如下所示。

代码语言:javascript
复制
var str = "the leading blade edges of the fan blade is bulged";
var obj = {
  "result": [{
    "name": "blade",
    "startPos": 12,
    "endPos": 17

  }, {
    "name": "bulged",
    "startPos": 44,
    "endPos": 50
  }]
};
obj.result.sort(function(a, b) {
  return b.startPos - a.startPos;
})

for (var i = 0; i < obj.result.length; i++) {
  var start = obj.result[i].startPos,
    end = obj.result[i].endPos,
    before = str.substring(0, start),
    after = str.substring(end),
    middle = "<strong>" + obj.result[i].name + "</strong>";

  str = before + middle + after;
}


document.getElementById("result").innerHTML = str;
代码语言:javascript
复制
<div id="result"></div>

票数 0
EN

Stack Overflow用户

发布于 2014-11-10 08:38:21

我知道您正在寻找的可能是一种更结构化的方法,但我想最好的方法是如下所示:

代码语言:javascript
复制
var str = "the leading blade edges of the fan blade is bulged";
for(var loc in obj.result){
    str = str.substring(0,obj.result[loc].startPos+loc*17) + "<strong>" +
      str.substring(obj.result[loc].startPos+loc*17,obj.result[loc].endPos+loc*17) + "</strong>" +
      str.substring(obj.result[loc].endPos+loc*17);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26839175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档