正则表达式在字符串第 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"
.
这些值是动态的并且会发生很大变化,因此将行与值匹配不一定是一个选项。
\A_STRING_HERE.+\g
将匹配所有出现的行尾。
\A_STRING_HERE.+\
将匹配第一个匹配项到行尾。
\A_STRING_HERE.+\??????
将匹配第 3 次出现到行尾?
再次感谢,祝一切顺利!
您或许可以试试这个正则表达式:
(?<=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]);
潜伏已久,第一次发布!预先感谢任何可以提供帮助的人。
我正在使用 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"
.
这些值是动态的并且会发生很大变化,因此将行与值匹配不一定是一个选项。
\A_STRING_HERE.+\g
将匹配所有出现的行尾。\A_STRING_HERE.+\
将匹配第一个匹配项到行尾。\A_STRING_HERE.+\??????
将匹配第 3 次出现到行尾?
再次感谢,祝一切顺利!
您或许可以试试这个正则表达式:
(?<=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]);