簡體   English   中英

Javascript 中的 RegExp 允許部分字符串匹配“Manchester”但不匹配“Manchester Road”

[英]RegExp in Javascript to allow partial string matching of 'Manchester' but not match 'Manchester Road'

我想在我的網絡表單中搜索“曼徹斯特”這個城市,它會搜索我的 mongoDB。 我不想要街道或道路或任何包含曼徹斯特的東西,例如“Godmanchester”。 我只想要城市/字符串 'Manchester' 或部分像 'Manchest' 或 'Mancheste' 這樣我就可以發現拼寫錯誤。 在我開始之前,我得到了諸如“Godmanchester”和“Manchester Road”之類的答案以及正確的“Manchester”。 通過在我的 RegExp 中使用“^”,我設法擺脫了“Godmanchester”匹配。 然后我設法通過使用這個 RegExp 語句擺脫了“曼徹斯特路”:

new RegExp('^(?!Manchester Road|Manchester Old Road)' + req.query.search, 'i') :

現在的問題是,我必須明確說明我不想要的每個單詞/短語(例如“曼徹斯特路”、“利茲路”、“利物浦路”等)。 這將是一個龐大的陣列,不好。 我真的需要一個 javascript RegExp,它只是刪除了其中包含“道路”一詞的任何內容。 所以我試過這個:

new RegExp('^((?!road).)*$' + req.query.search, 'i') :

但它在我的 javascript 中返回零結果。 但是,如果使用

/^((?!road).)*$/i

在像https://regex101.com/這樣的 Regex 測試工具中,它工作正常。 所以可能是我將它寫入我的 javascript 的方式......

您可以使用動態構建的正則表達式,例如

new RegExp('^(?!.*\\b' +  req.query.search +'(?:\\s+Old)?\\s+Road\\b).*\\b' + req.query.search + '\\b', 'i')

查看正則表達式演示

正則表達式是

^(?!.*\bManchester(?:\s+Old)?\s+Road\b).*\bManchester\b

細節

  • ^ - 字符串的開始
  • (?!.*\\bManchester(?:\\s+Old)?\\s+Road\\b) - 如果有Manchester作為整個單詞,則匹配失敗,然后是可選的 1+ 空格和Old ,然后是 1+ 空格和Road作為一個整體
  • .*\\bManchester\\b - 任何跟在Manchester后面的文本作為一個整體。

暫無
暫無

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

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