正则表达式在字符串第 n 次出现后匹配整行

RegEx to match whole line after nth occurrence of a string

潜伏已久,第一次发布!预先感谢任何可以提供帮助的人。

我正在使用 Node.JS 和 Electron 制作一个小型桌面应用程序来管理游戏文件中的值(来自自定义文件类型,基本上是一个美化的 INI 文件)。我们的想法是让人们可以很好地 UI 自定义文件,而不是梳理数百行代码。以下是文件中的示例:

setting $Low
    prop $Config A_STRING_HERE "5, 10, 15, 20"

setting $Medium
    prop $Config A_STRING_HERE "10, 20, 40, 80"

setting $High
    prop $Config A_STRING_HERE "20, 40, 80, 160"

setting $VeryHigh
    prop $Config A_STRING_HERE "40, 80, 160, 320"

我将如何匹配,例如,包含“A_STRING_HERE”的“setting $High”(第 3 次)直到行尾。我希望匹配:
A_STRING_HERE "20, 40, 80, 160".

这些值是动态的并且会发生很大变化,因此将行与值匹配不一定是一个选项。

再次感谢,祝一切顺利!

您或许可以试试这个正则表达式:

(?<=setting $High\n\s*?prop $Config )A_STRING_HERE.*

解释

  • (?<=) - 代表 positive lookbehind.
  • setting $High\n\s*?prop $Config - 将此匹配与其他匹配分开的文本。您可以省略 setting 部分以使其更简洁。
    • \n - 表示换行。
    • \s*? - Lazily 匹配 0 个或多个空格。您可以根据需要进行调整。
  • .* - 匹配除 \n 之外的所有内容。如果您只想包含数字,也可以在此处具体说明。
  • \g - 请注意仅使用全局标志。

你可以在here.

中找到上述正则表达式的实现

图片说明:

const regex = /(?<=setting $High\n\s*?prop $Config )A_STRING_HERE.*/g;

// Alternative syntax using RegExp constructor
// const regex = new RegExp('(?<=setting \$High\n\s*?prop \$Config )A_STRING_HERE.*', 'g')

const str = `setting $Low
    prop $Config A_STRING_HERE "5, 10, 15, 20"
setting $Medium
    prop $Config A_STRING_HERE "10, 20, 40, 80"
setting $High
    prop $Config A_STRING_HERE "20, 40, 80, 160"
setting $VeryHigh
    prop $Config A_STRING_HERE "40, 80, 160, 320"`;
console.log(str.match(regex)[0]);