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

Regex to select whole word if part matches

本文关键字:选择 正则表达式 单词 如果部      更新时间:2023-09-26

我希望能够选择整个单词,在匹配之前和之后…

目前它只选择单词中匹配的部分。所以如果我在单词"Doglets"中查找"Dog",它会选择Dog。

我想让它选择小狗。如果是这样的话,我还想让它选择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>

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

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

你的代码将是:

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>"));
.search-enlight {
  background-color: yellow;
  color: red;
}

你能在被替换之前发布你的html样本吗?cause/([^]Dog[^])/应该可以工作,但是你的关键字周围似乎有一些'b,所以答案应该是

([^ ]*)(''bdog''b)([^ ]*)
对于像 这样的字符串

test of 'bdog'blet

用这个代替:'b.*?dog.*?'b .

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

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

另一个选项:

'w*Dog'w*