如何在javascript中搜索句子中的单词
How to Search a word from a sentence in javascript
这里有这个html代码:
<p id = "str">How much wood could a wood chip chop</p>
<br>
<input type = "text" value = "" id = "txt1"/>
<button onclick = "myFunction()"> Search </button>
<p id="demo">Display the result here.</p>
和javascript代码:
function myFunction()
{
var myString = document.getElementById("str").innerHTML;
var myWord = document.getElementById("txt1").value;
var myPattern = new RegExp('.'+myWord,'g');
var myResult = myString.split(" ");
for(var i=0; i<myResult.length; i++) {
var result = myResult[i].match(myPattern);
if(result) break;
}
document.getElementById("demo").innerHTML = myResult;
}
现在我要做的是:
当用户输入
woo
时,将输出wood
以及找到的结果数量,如-2 results found
。当用户输入
od
时,它也会输出wood
以及发现的结果数量,如-2 results found
。与
ch
相同-输出应为chip, chop
-2 results found
和
op
-它的输出应该是chop
-1 result found
永远不要调用onclick
HTML属性中的函数,而是使用事件。请参考这个SO问题。我已经用jQuery click
函数代替了这个调用-如果你喜欢,你可以使用香草JS方法。
你的代码几乎可以工作了。您可以简单地使用RegExp match
方法来查找字符串中出现的次数。你不需要手动操作。
这段代码为我工作:
var myString = document.getElementById("str").innerHTML;
var myWord = document.getElementById("txt1").value;
var myPattern = new RegExp('(''w*'+myWord+'''w*)','gi');
var matches = myString.match(myPattern);
if (matches === null)
{
document.getElementById("demo").innerHTML = "No results"; // Any message or empty
return;
}
document.getElementById("demo").innerHTML = matches + " - " + matches.length + " result(s) found.";
我宁愿把句子分成几个词:
var words = myString.split(' ');
现在过滤包含要查找的文本的单词:
words = words.filter(function(word) {
return word.indexOf(myWord) !== -1;
}
然后把它们打印出来或者插入到DOM中或者其他什么地方:
result = words.join(',') + " - " + words.length + " result(s) found";
document.getElementById("demo".textContent = result;
这是一只野兽:
/**
* @param {string} sel Selector to match
* @param {HTMLElement} par (Optional) Parent element | document
* @returns {HTMLElement} the matched Element by selector
*/
const el = (sel, par) => (par || document).querySelector(sel);
/**
* @param {string} str String to RegExp escape
* @returns {string} String with special RegExp chars escaped
*/
const regEsc = (str) => str.replace(/[-'/''^$*+?.()|[']{}]/g, "''$&");
/**
* @param {string} str String to search in text
* @param {string} text
* @returns {array} Word/s with bold characters (that match str)
*/
const getPortions = (str, text) => {
const results = [];
str = str.trim(); // Remove wrapping whitespaces
if(str.length > 0) {
const rgxp = new RegExp("(''S*)?("+ regEsc(str) +")(''S*)?", "ig");
text.replace(rgxp, function(match, $1, $2, $3){
results.push(`${$1||""}<b>${$2}</b>${$3||""}`);
});
}
return results;
};
// The task:
const elString = el("#string");
const elSearch = el("#search");
const elResult = el("#result");
elSearch.addEventListener("input", () => {
const result = getPortions(elSearch.value, elString.textContent);
elResult.innerHTML =
!elSearch.value ?
`` :
`<i>Found ${result.length} results:</i><br> ${result.join("<br>")}`;
});
#result b { color: red; }
<p id="string">How much wood could a wood chip chop</p>
<input id="search" type="search" placeholder="Search…" autosuggestion=off>
<div id="result"></div>
- 返回结果结果长度,
- 包含字符的部分,
- 你不需要按钮来开始搜索。
基本上是这个答案的翻版:截断文本保存关键字
试试这个
function myFunction()
{
var myString = document.getElementById("str").innerHTML;
var myWord = document.getElementById("txt1").value;
var myPattern = new RegExp(myWord,'g');
var myResult = myString.split(" ");
var innerHtmml="";
var count=0;
for(var i=0; i<myResult.length; i++) {
var result = myResult[i].match(myPattern);
if(result) {
alert(myResult[i]);
innerHtmml=myResult[i]+",";
count++;
}
}
document.getElementById("demo").innerHTML = myResult;
}
相关文章:
- 使用jQuery检查提交时添加到句子中的单词
- 如何使用Javascript在给定的句子中找到大写单词并在其前面添加一个字符
- 获取特殊字符后没有单词的句子
- 我怎么能用css或(angular)javascript把句子分成两行,只在特定单词后面
- 找出句子中最长的单词——Javascript
- undercore返回数组中对象的indes,其中单词存在于对象中的句子中
- 如何按从当前单词到段落中该句子(.)结尾的范围选择文本
- regex过滤单词长度最小的句子
- Regex帮助:将单词分解以完成句子测验
- JavaScript只接收句子中的第一个单词
- 在jQuery中,只从句子中获取单词或数字的一部分
- 使用正则表达式提取句子中的最后几个单词
- 我如何在 Java 脚本中找到句子中单词的出现次数
- 计算长字符串中每个句子的单词,jQuery
- 将句子或驼峰大小写单词转换为棘壳
- JavaScript 正则表达式匹配句子中的单词
- 将句子字符串拆分为单词数组,然后将单词数组拆分为单词数组中的字符数组
- 正则表达式检查句子的单词
- 除句子的第一个单词之外的每个单词的正则表达式
- 从句子中设置一个单词的样式