javascript - 正则表达式在 javascript 中查找某些内容之间的字符串

标签 javascript regex

我有这两个字符串:

(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~).*?(?=[)~])

Regex demo

除了使用lookbehind(跨浏览器尚未完全支持)之外,您还可以使用捕获组并确保有左括号和右括号。

该值位于组 1 中。

\((?:[^~\r\n]+~)*status~contains~([^~\n]+)(?=[^()]*\)) 
  • \( 匹配开头 (
  • (?: 非捕获组
    • [^~\r\n]+~ 匹配除 ~ 或换行符之外的任意字符 1 次以上
  • )* 关闭组,重复 0 次以上
  • status~contains~ 按字面意思匹配
  • ( 捕获组 1
    • [^~\n]+ 匹配除 ~ 或换行符之外的任意字符 1 次以上
  • ) 关闭群组
  • (?=[^()]*\)) 正向前瞻,断言结束 )

Regex demo

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/

相关文章:

javascript - javascript 中的 Date.UTC() 方法出现问题

JavaScript如何计算变量的类型并返回数组的总和

c++ - 如何用任意数量的空格替换一个空格?

Java正则表达式仅替换部分字符串(url)

java - 如何检查字符串是否有连续的空格

javascript - Angular 种子项目 - angular-loader-js 依赖

javascript - 如果单击,将 href 文本添加到链接

javascript - 使用 javascript 进行文字转语音?

php - 如何在正则表达式的环视中匹配多个(N)空格?

java - 不包含在正则表达式中