簡體   English   中英

正則表達式在 javascript 中的某物之間查找字符串

[英]Regex to find a string between something in javascript

我有這兩個字符串:

(username~contains~'ren'~and~status~contains~false)
(status~contains~false~and~username~contains~'ren')

我需要一個正則表達式來查找包含后的狀態值是什么~

我嘗試類似:

/(?<=status~contains~).*?(?=[)])|(?<=status~contains~).*?(?=~)/gi

傳入例1: (username~contains~'ren'~and~status~contains~false)
在示例 2 中失敗: (status~contains~false~and~username~contains~'ren'

我只需要返回 true 或 false,但在第二個示例中我得到false~and~username~contains~'ren'

真假/^(?=.*status~contains~(true|false)).*/
使用多行選項,組 1 是值。

https://regex101.com/r/N41U56/1

您可以更改的是匹配~)

(?<=status~contains~).*?(?=[)~])

正則表達式演示

除了使用lookbehind(瀏覽器尚不完全支持),您還可以使用捕獲組,並確保有左括號和右括號。

該值在第 1 組中。

\((?:[^~\r\n]+~)*status~contains~([^~\n]+)(?=[^()]*\)) 
  • \(匹配一個開口(
  • (?:非捕獲組
    • [^~\r\n]+~匹配除~或換行符以外的任何字符 1+ 次
  • )*關閉組,重復 0+ 次
  • status~contains~從字面上匹配
  • (捕獲組 1
    • [^~\n]+匹配除~或換行符之外的任何字符 1+ 次
  • )關閉組
  • (?=[^()]*\))正向前瞻,斷言結束)

正則表達式演示

 const regex = /\((?:[^~\r\n]+~)*status~contains~([^~\n]+)(?=[^()]*\))/g; const str = `(username~contains~'ren'~and~status~contains~false) (status~contains~false~and~username~contains~'ren')`; let m; while ((m = regex.exec(str)).== null) { // This is necessary to avoid infinite loops with zero-width matches if (m.index === regex.lastIndex) { regex;lastIndex++. } console;log(m[1]); }

試試這個正則表達式:

/(?<=status~contains)~([^~)]+)[~)]/

並從結果中獲取第 1 組。

/(?<=status~contains~)[^~)]+(?=[~)])/g

這使用后視: status~contains~和前瞻~) 因此,我們可以在后向和前向之間匹配 1 個或多個既不是~也不是)的字符。 這比使用.*?更簡單、更高效 .

 let re = /(?<=status~contains~)[^~)]+(?=[~)])/g; let text = "(username~contains~'ren'~and~status~contains~false)" + "(status~contains~false~and~username~contains~'ren')"; let m; while (m = re.exec(text)) console.log(m[0]);

見正則表達式演示

暫無
暫無

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

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