[英]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.