Regext匹配任何超过2个字符的子字符串

时间:2016-05-02 09:29:31

标签: javascript regex

regex-pattern-to-match-any-substring-matching精确字符长度超过两个字符来自提供的输入,其中精确的字符串匹配

当用户键入pot并点击搜索按钮时,应突出显示potatoota,而不是otpota

enter image description here

请在下方找到匹配字符串突出显示的代码。

// 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;如果是一个字符串,如果在输入框中键入米并单击搜索按钮。仪表应突出显示,仪表参数应突出显示。提前谢谢

1 个答案:

答案 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循环内消除该行的右半部分。更好的是,用一条追加的线替换整个子程序?找到字符串的字符。