繁体   English   中英

使用正则表达式在 class 定义中查找基本 class 名称

[英]Find base class iname in class definition using regexp

我正在使用 Javascript。

我有一个文件可以是这样的:

/* Loaded modules -- end */

class Element extends One(Two(PageElement)) {
  static get pagePath () { return [ '/elelel'] }

  static get styles () {

或者像这样:

/* Loaded modules -- end */

class Element extends PageElement {
  static get pagePath () { return [ '/elelel'] }

  static get styles () {

我想在这两种情况下都使用 Javascript 正则表达式找到PageElement

我到了这里:

contents.match(/^[ \t]*class[ \t]+\w+[ \t]+extends[ \t]+(.*)$/m)

括号中的第一个匹配项是One(Two(PageElement)) { 我在匹配PageElement时遇到了真正的麻烦——尤其是因为One(Two( (以及结尾的右括号)可能不存在。

利用:

/^\s*class\s+\w+\s+extends\s+(:?\w+\s*\(\s*)*(\w+)[\s)]*/m

模式\w+\s*\(匹配一个标记后跟( (在(周围有可选的空格。这个后跟*的组允许任意数量的这些 (不包括 0,所以它们是可选的)。

并且[\s)]*允许在超类名称之后使用任意数量的) (同样,带有可选空格)。

 function get_superclass(content) { let match = content.match(/^\s*class\s+\w+\s+extends\s+(?:\w+\s*\(\s*)*(\w+)[\s)]*/m); if (match) { return match[1]; } } console.log(get_superclass(`/* Loaded modules -- end */ class Element extends PageElement { static get pagePath () { return [ '/elelel'] } static get styles () {`)); console.log(get_superclass(`/* Loaded modules -- end */ class Element extends One(Two(PageElement)) { static get pagePath () { return [ '/elelel'] } static get styles () {`));

试试下面的正则表达式。

^[ \t]*class[ \t]+\w+[ \t]+extends[ \t]+(?:\w+\()*(\w+)[)\s]*{$

非捕获组(?:\w+\()*捕获后跟左括号的任何字符集,并将其从我们需要捕获的实际数据中删除,类似地[)\s]*将匹配任何右括号,如果它们可用,因此给我们留下了我们正在寻找的确切 class 名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM