regex-pattern-to-match-any-substring-matching精确字符长度超过两个字符来自提供的输入,其中精确的字符串匹配
当用户键入pot
并点击搜索按钮时,应突出显示potato
或ota
,而不是ot
或pota
。
请在下方找到匹配字符串突出显示的代码。
// Core function
function buildRegexFor(find) {
var regexStr = find.substr(0,3);
for (var i = 1; i < find.length - 2; i++) {
regexStr = '(' + regexStr + find.substr(i+2,1) + '?|' + find.substr(i,3) + ')';
}
return regexStr;
}
// Handle button click event
document.querySelector('button').onclick = function () {
// (1) read input
var find = document.querySelector('input').value;
var str = document.querySelector('textarea').value;
// (2) build regular expression using above function
var regexStr = buildRegexFor(find);
// (3) apply regular expression to text and highlight all found instances
str = str.replace(new RegExp(regexStr, 'g'), "<strong class='boldtxt'>$1</strong>");
// (4) output
document.querySelector('span').textContent = regexStr;
document.querySelector('div').innerHTML = str;
};
考虑&#34;米&amp;参数&#34;如果是一个字符串,如果在输入框中键入米并单击搜索按钮。仪表应突出显示,仪表参数应突出显示。提前谢谢
答案 0 :(得分:1)
你的for循环设置为从i = 1开始,而i小于find.length-2。 find.length是4. 4-2是2.所以你的for循环设置为从i = 1而i小于2.换句话说,它只运行一次。我不知道你认为循环会怎么做,但我打赌不是它。
在for循环之前,regextr设置为等于字符串pot
(查找字符串的前三个字符。通过for循环的第一个(也是唯一的)时间,它被设置为新值:左边的paren,现有的值(pot),find的第四个字符(a),问号,竖线,以及从第二个开始查找的三个字符。将它们放在一起,你的regextr出现:
(pota?|ota)
RegEx说找到字符串“pota”(a是可选的,所以“pot”也可以)或字符串“ota”。因此,任何pota,pot或ota的实例都将被找到并突出显示。
如果你只是想要“pota?”,只需在for循环内消除该行的右半部分。更好的是,用一条追加的线替换整个子程序?找到字符串的字符。