我有这两个字符串:
(username~contains~'ren'~and~status~contains~false)
(status~contains~false~and~username~contains~'ren')
我需要一个正则表达式来查找 contains 之后的状态值是什么~
我尝试这样的事情:
/(?<=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~).*?(?=[)~])
除了使用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]);
}
关于javascript - 正则表达式在 javascript 中查找某些内容之间的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58614547/