JavaScript:根据选择索引替换某些字符串

时间:2018-01-05 11:51:44

标签: javascript angularjs keydown

我已经创建了自己的自动完成功能,但我遇到了一个我想修复的错误。这是一个不完整句子的例子我可能想要自动完成最后一个单词:

public void test() {

    when(mockedRestTemplateObject.get).thenReturn(mockRestTemplate);

    //mock restTemplate.exchange
    when(mockRestTemplate.exchange(...)).thenReturn(mockedResponseEntity);

    SomeService someService = new SomeService(mockedRestTemplateObject);
    someService.getListofObjectsA();
}

在我的功能中,用户点击let text = 'Hello there, I am her' + ctrl,并在页面上显示建议时自动填充该字词。在这种情况下,让我们说这个建议是'这里'。我的控制器也知道用户基于插入光标的位置(所以我有索引)。

如果我像这样使用替换:

enter

(其中单词是'她',建议是'这里')它将取代第一次出现。显然,这个单词可能在文本中的位置有无穷无尽的组合,如何在text.replace(word, suggestion); 字符串中的某个索引处替换一个?我知道我可以通过一些凌乱的text条件来做到这一点,但是有一种优雅的方法吗?

(如果相关我正在使用角度keydown / keyup)

编辑>>>>> 这不是链接问题的重复,因为在这种情况下,它们总是替换最后一次出现。如果我这样做,那么我的程序将不支持用户返回句子并尝试自动填写新单词

2 个答案:

答案 0 :(得分:0)

因此,你有一个字符串中的位置和要替换的多个字符(=不完整单词的长度)。在这种情况下,这会起作用吗?

let text = 'appl and appl and appl'

function replaceAt(str, pos, len, replace) {
    return str.slice(0, pos) + replace + str.slice(pos + len);
}

console.log(replaceAt(text, 0, 4, 'apple'))
console.log(replaceAt(text, 9, 4, 'apple'))

答案 1 :(得分:0)

要指出你应该开始的方向。

let sentence = 'Hello lets replace all words like hello with Hi';
let fragments = sentence.split(' ');
for (let i=0; i<fragments.length; i++){
 if(fragments[i].toLowerCase() == 'hello')
   fragments[i] = 'Hi'
}
let formattedsentence = fragments.join(' ');
console.log(formattedsentence); //"Hi lets replace all words like Hi with Hi"