使用正则表达式捕获不带引号的双引号内的字符串

时间:2019-11-18 02:08:02

标签: regex

有一个功能脚本var f = new Process("name01", "code01", "version01"); 我想使用正则表达式进行过滤以获取name01属性。但是此过滤器: “([[^”] +)“ 适用于所有属性。

"name01"
"code01"
"version01"

如何获取不带双重配额的name属性,这里是 name01 ,它是函数中的第一个参数。它仅出现在Process关键字之后。

Edit1: 在我的第一个问题中,两种模式(?<=Process\(")[^\r\n"]*\bProcess\("([^"]+)"[^()]*\)都适用于这种情况。谢谢。

Edit2: :可能是另一个要求从下面的文本脚本中检索过程函数的所有3个参数:

var f = pmb.Process("name01", "code01", "version01") .Task("name01", "code01");

我需要获取过程函数参数:

name01
code01
version01

并且不需要任务功能参数。首先(感谢虎鸟),

\bProcess\([^()]*\)

这仅匹配Process("name01", "code01", "version01"),是否应该使用第二个模式对其进行过滤以获取3个参数?谢谢!

2 个答案:

答案 0 :(得分:2)

也许

(?<=\(")[^\r\n"]*

(?<=Process\(")[^\r\n"]*

我想,如果支持lookbehind,可以进行研究。

RegEx Demo 1

RegEx Demo 2


如果您想简化/更新/探索表达式,请在regex101.com的右上角进行解释。如果您有兴趣,可以观看匹配的步骤或在this debugger link中进行修改。调试器演示了a RegEx engine如何逐步使用一些示例输入字符串并执行匹配过程的过程。


RegEx电路

jex.im可视化正则表达式:

enter image description here

答案 1 :(得分:2)

无需在后面加上正号,因为模式中唯一缺少的与双引号之间的第一个值匹配的东西是在开头加上括号:

\("([^"]+)"
^^
  • \("匹配("
  • (捕获第1组
    • [^"]+匹配除"以外的任意字符1倍以上
  • )"关闭组并匹配“

该值在第一个捕获组中。

Regex demo


如果您还想确保有一个右括号,并且该括号以Process开头:

\bProcess\("([^"]+)"[^()]*\)

Regex demo