Javascript 在Django模型类的多行表示中捕获字段名

Javascript 在Django模型类的多行表示中捕获字段名,javascript,regex,Javascript,Regex,您好,我需要为vscode扩展编写一个正则表达式,它匹配字符串表示中类的字段: const str = ` title = models.CharField( blank=True ) text = models.TextField() author=ForeignKey( User, on_delete=models.CASCADE ) test_num_10 = models.TextFIeld() ` 从下面的多行

您好,我需要为vscode扩展编写一个正则表达式,它匹配字符串表示中类的字段:

const str = `
  title = models.CharField(
      blank=True
  )    
  text = models.TextField() 
  author=ForeignKey(
      User,
      on_delete=models.CASCADE
  )
  test_num_10 = models.TextFIeld()
  `
从下面的多行字符串中,我需要捕获字符串
标题、文本、作者、test_num_10
每组都有一个模式:

  • 空白
  • 捕获组,任何角色
  • 可选空白
  • =
    符号
  • 可选空白
  • 任何字符
  • 符号
  • 可选的任意字符
  • 签名

到目前为止,我的regexp看起来像这样
/\s+(.+)(\s+)?\=(\s+)?+\((.+)?\)。+/
。但是它与我期望的不匹配,请帮助我找出它。

对于示例数据,您可以使用以下方法匹配您的值:

这将符合:

  • \s*
    匹配零次或多次空白字符
  • (.+?)
    在组中捕获任何字符零次或多次非贪婪
  • \s*
    匹配零次或多次空白字符
  • =
    逐字匹配
  • \s*+
    匹配零次或多次空格字符后跟任意字符一次或多次
  • \(([\s\s]*?)\)
    在括号之间捕获组中的任何非贪婪字符

对于示例数据,您可以使用以下方法匹配您的值:

这将符合:

  • \s*
    匹配零次或多次空白字符
  • (.+?)
    在组中捕获任何字符零次或多次非贪婪
  • \s*
    匹配零次或多次空白字符
  • =
    逐字匹配
  • \s*+
    匹配零次或多次空格字符后跟任意字符一次或多次
  • \(([\s\s]*?)\)
    在括号之间捕获组中的任何非贪婪字符

    • 您的正则表达式饱受贪婪之苦(所有点星消耗到行尾,然后导致回溯)。如果有机会,您最好寻找一种限制模式:

      (\S+)\s*=\s*[^(]*\(([^)]*)\)
      
      • \S
        匹配非空白字符
      • \s
        这与
        \s
      • [^(]*
        匹配除左括号外的任何内容(可选)
      • [^)]*
        匹配除右括号外的任何内容(可选)

      您的正则表达式饱受贪婪之苦(所有点星消耗到行尾,然后导致回溯)。如果有机会,您最好寻找一种限制模式:

      (\S+)\s*=\s*[^(]*\(([^)]*)\)
      
      • \S
        匹配非空白字符
      • \s
        这与
        \s
      • [^(]*
        匹配除左括号外的任何内容(可选)
      • [^)]*
        匹配除右括号外的任何内容(可选)

      对于您的示例数据,请像这样尝试—它可以正常工作。把这个放在一个答案中,这样我就可以感谢你:)对于你的示例数据,像这样尝试它是有效的。把这个写进一个答案,这样我就可以谢谢你了:)