在从索引位置返回的字符串中查找白色 space
Find white space in a string back from an index position
假设我有一个字符串,但文本可以是任何内容!
This is a test case
'boundary' 是 space 之后的计数,这意味着 charIndex =
(0) 这个
(5) 是
(8) 一个
(10) 测试
(15) 案例
以上表示从(0)到(5)字等于'this '.
如果我想知道刚刚使用的单词,我需要substr
从charIndex
开始,然后向后看直到indexOf(' ')
示例:如果我想找到刚刚在 charIndex (10) 处使用的单词,我将如何指示 javascript 向后查找直到下一个 space 并给我单词 "a ".
是否可以使用 Javascript 或 JQuery 以尽可能少的处理时间做到这一点?
更新
我决定实现我需要的,而不是查看单词并返回,而是拆分单词并将每个charIndex用作计数。代码如下:
var u = new SpeechSynthesisUtterance();
var words = element.innerHTML.split(' ');
var a = 0;
u.text = element.innerHTML;
u.lang = 'en-UK';
u.rate = 0.7;
u.onboundary = function(event) {
console.log(words);
element.innerHTML = element.innerHTML.replace(words[a], '<strong>' + words[a] + '</strong>');
a++;
}
但由于这不是问题的答案,反向搜索字符串的最佳答案仍然是标记为正确的答案,尽管它仍然需要一些工作,具体取决于字符串结构。
如果我理解你的问题,你可以使用 lastIndexOf:
var TC="This is a test case"
TC.lastIndexOf(" ",10)
这将 return 9,使用 lastIndexOf(string,position) 向后搜索。
编辑:
如果你需要的话:
var TC="This is a test case"
TC.substr(TC.lastIndexOf(' ',10)+1,TC.length - TC.indexOf(' ',10));
所以你使用substr。首先从位置 10 space 向后搜索(和 1 得到字母的开头)以开始 substr。作为第二个参数 y 获取下一次出现并减去长度。
编辑 2:
好的,这个功能应该在不到毫秒的时间内工作:
function getWord(phrase,position){
var last = phrase.indexOf(' ',position);
var more=0
if (last == -1){
more = phrase.length;
} else { more = phrase.indexOf(' ',position);}
var word = phrase.substring(phrase.lastIndexOf(' ',position)+1,more);
return(word);
}
在这个 plunkr http://plnkr.co/wfeitWvSvoLzqIknKFyg 中,您可以检查它是如何在不到一毫秒的时间内工作的。如果你打开一个控制台,你会看到它如何在指定的位置获取单词。
不清楚确切的问题,但您可以在您的案例中结合使用 lastindexof、indexof 和 substr,或者编写您自己的东西。
注意: 没有进行错误处理等。请这样做。
var stringToBeParsed="This is a test case"
i = stringToBeParsed.lastIndexOf(" ",8);
j = stringToBeParsed.indexOf(" ",i+1);
document.getElementById('output').innerText = stringToBeParsed.substr(i,j-i);
自定义
function parseBackward(stringToBeParsed, indexOfSpace){
var output = '';
for (var i = indexOfSpace-1; i >= 0; i--) {
if(stringToBeParsed.charAt(i) == ' '){
break;
}
output = stringToBeParsed.charAt(i) + output;
}
document.getElementById('output').innerText = output;
}
假设我有一个字符串,但文本可以是任何内容!
This is a test case
'boundary' 是 space 之后的计数,这意味着 charIndex =
(0) 这个 (5) 是 (8) 一个 (10) 测试 (15) 案例
以上表示从(0)到(5)字等于'this '.
如果我想知道刚刚使用的单词,我需要substr
从charIndex
开始,然后向后看直到indexOf(' ')
示例:如果我想找到刚刚在 charIndex (10) 处使用的单词,我将如何指示 javascript 向后查找直到下一个 space 并给我单词 "a ".
是否可以使用 Javascript 或 JQuery 以尽可能少的处理时间做到这一点?
更新
我决定实现我需要的,而不是查看单词并返回,而是拆分单词并将每个charIndex用作计数。代码如下:
var u = new SpeechSynthesisUtterance();
var words = element.innerHTML.split(' ');
var a = 0;
u.text = element.innerHTML;
u.lang = 'en-UK';
u.rate = 0.7;
u.onboundary = function(event) {
console.log(words);
element.innerHTML = element.innerHTML.replace(words[a], '<strong>' + words[a] + '</strong>');
a++;
}
但由于这不是问题的答案,反向搜索字符串的最佳答案仍然是标记为正确的答案,尽管它仍然需要一些工作,具体取决于字符串结构。
如果我理解你的问题,你可以使用 lastIndexOf:
var TC="This is a test case"
TC.lastIndexOf(" ",10)
这将 return 9,使用 lastIndexOf(string,position) 向后搜索。
编辑: 如果你需要的话:
var TC="This is a test case"
TC.substr(TC.lastIndexOf(' ',10)+1,TC.length - TC.indexOf(' ',10));
所以你使用substr。首先从位置 10 space 向后搜索(和 1 得到字母的开头)以开始 substr。作为第二个参数 y 获取下一次出现并减去长度。
编辑 2:
好的,这个功能应该在不到毫秒的时间内工作:
function getWord(phrase,position){
var last = phrase.indexOf(' ',position);
var more=0
if (last == -1){
more = phrase.length;
} else { more = phrase.indexOf(' ',position);}
var word = phrase.substring(phrase.lastIndexOf(' ',position)+1,more);
return(word);
}
在这个 plunkr http://plnkr.co/wfeitWvSvoLzqIknKFyg 中,您可以检查它是如何在不到一毫秒的时间内工作的。如果你打开一个控制台,你会看到它如何在指定的位置获取单词。
不清楚确切的问题,但您可以在您的案例中结合使用 lastindexof、indexof 和 substr,或者编写您自己的东西。
注意: 没有进行错误处理等。请这样做。
var stringToBeParsed="This is a test case"
i = stringToBeParsed.lastIndexOf(" ",8);
j = stringToBeParsed.indexOf(" ",i+1);
document.getElementById('output').innerText = stringToBeParsed.substr(i,j-i);
自定义
function parseBackward(stringToBeParsed, indexOfSpace){
var output = '';
for (var i = indexOfSpace-1; i >= 0; i--) {
if(stringToBeParsed.charAt(i) == ' '){
break;
}
output = stringToBeParsed.charAt(i) + output;
}
document.getElementById('output').innerText = output;
}