簡體   English   中英

正則表達式匹配句子中的部分單詞

[英]Regex match partial words in a sentence

我有一個可以接收任何字符串值的輸入。 用戶可能會輸入 2 個部分單詞,我需要能夠匹配與其中一些字符匹配的最近單詞,考慮到當輸入值包含空格時我需要查看下一個單詞。

我遇到的問題是,例如,如果我鍵入 stack 它匹配,如果我鍵入 overflow 它匹配,如果我鍵入 stack over 它仍然匹配,但如果第一個單詞不完整它不匹配。

一個例子來澄清:

const mySentence = "stack overflow";
let myInput = "sta over"; //input from user

let reg = new RegExp(myInput, 'i');

mySentence.match(reg); //this needs to match mySentence. 

一種方法是在創建RegExp之前准備您的輸入。 由於您想要獲取句子中的部分單詞,請使用惰性版本的點星號 (.*?) 來匹配每個空格之前存在的任何可能字符。

為此,只需將輸入字符串按空格拆分並與.*?[ ]連接,然后構建正則表達式。 如果要保留單詞之間的空格,請注意其后的空格字符[ ]

 const mySentence = "stack overflow bad but stackoverflow cool"; let myInput = "sta over ba b st coo"; //input from user let reg = new RegExp(myInput.split(" ").join(".*?[ ]"), 'i'); console.log(mySentence.match(reg))

在@testing_22 的基礎上,可以使用帶有“或”(管道)的准備:

 const mySentence = "stack overflow"; let myInput = "sta over ba b st coo"; //input from user var cases = [ "sta over", "stack", "overflow", "stack over", "bob" ]; cases.forEach(item => { let reg = new RegExp(item.split(" ").join("|"), 'gi'); console.log("------------------") console.log("case: " + item) console.log(mySentence.match(reg)) });

結果:

------------------
case: sta over
[
    "sta",
    "over"
]
------------------
case: stack
[
    "stack"
]
------------------
case: overflow
[
    "overflow"
]
------------------
case: stack over
[
    "stack",
    "over"
]
------------------
case: bob
null
------------------

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM