[英]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 是值。
您可以更改的是匹配~
或)
(?<=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.