如果部分匹配,正则表达式选择整个单词

时间:2015-09-01 13:22:49

标签: javascript jquery regex

我希望能够在比赛前后选择整个单词......

目前它只选择单词中匹配的部分。因此,如果我在单词"Dog"中照看"Doglets",则会选择Dog。

我希望它选择Doglets。如果是这种情况,我也希望它选择letsDog。

return html.replace(new RegExp('(\\b)(' + query + ')(\\b)', 'ig'), "<span class='search-enlight'>$&</span>");

更新:

function filterSearchWords() {
    var query = $("#searchquery").val();

    go(query);
    function go(query) {
        $.extend($.expr[':'], {
            'containsi': function (elem, i, match, array) {
                return (elem.textContent || elem.innerText || '').toLowerCase()
                .indexOf((match[3] || "").toLowerCase()) >= 0;
            }
        });

        $(".search-result p:containsi(" + query + ")").html(function (_, html) {
            return html.replace(new RegExp('(\\b)( \\w*' + query + '\\w*)(\\b)', 'ig'), "<span class='search-enlight'>$&</span>")
        });
        $(".search-result h2 a:containsi(" + query + ")").html(function (_, html) {
            return html.replace(new RegExp('(\\b)( \\w*' + query + '\\w*)(\\b)', 'ig'), "<span class='search-enlight'>$&</span>")
        });
        console.log(query);
    }
}

它现在匹配完整的单词,但它与大写字母不匹配,i标志似乎无法正常工作

HTML:

div class="search-result">
                                <span class="thumb" style="font-family: 'draftit'; float: left;">&#xe811;</span>&nbsp;

                                <h2 class="title"><a href="/produkter/malins-testprodukt/skatteavdrag/berakning-av-skatteavdrag/skatteavdrag-nar-skattesedel-inte-har-lamnats/">Skatteavdrag n&#228;r skattesedel inte har l&#228;mnats</a></h2>
                                <p>
                                    Arbetsgivare f&#229;r fr&#229;n Skatteverket besked om hur skatteavdraget f&#246;r respektive anst&#228;lld ska ber&#228;knas. Se avsnittet  tabellavdrag och CSR-f&#246;rfr&#229;gan . Arbetstagaren beh&#246;ver d&#229; inte l...
                                </p>

                            </div>

4 个答案:

答案 0 :(得分:2)

在这种情况下,您需要在正则表达式中包含整个单词,请尝试以下方法:

(\\b)( \\w*'+ query + '\\w*)(\\b)

您的代码将是:

&#13;
&#13;
var html = "The Doggy dog is with Doglets and Doggy too!";
var query = "dog";

document.write(html.replace(new RegExp('(\\b)( \\w*' + query + '\\w*)(\\b)', 'ig'), "<span class='search-enlight'>$&</span>"));
&#13;
.search-enlight {
  background-color: yellow;
  color: red;
}
&#13;
&#13;
&#13;

答案 1 :(得分:2)

你可以在更换之前发布你的html样本吗? 原因/([^] 狗[^] )/应该有效,但你的字符串中似乎有一些\ b围绕你的关键字,所以答案应该是

([^ ]*)(\\bdog\\b)([^ ]*)

表示

之类的字符串
test of \bdog\blet

答案 2 :(得分:1)

请改用:\b.*?dog.*?\b

表达式的问题是您尝试匹配字边界所包围的query部分。在之前和之后添加.*?将指示正则表达式引擎对您感兴趣的子字符串和单词边界之间的其他字符进行非贪婪搜索:

return html.replace(new RegExp('(\\b)(.*?' + query + '.*?)(\\b)', 'ig'), "<span class='search-enlight'>$&</span>");

可用示例here

答案 3 :(得分:0)

另一个选择:

\w*Dog\w*

Test is here.