删除正则表达式语句的部分内容

时间:2015-06-03 13:10:19

标签: javascript regex

在Javascript中,是否可以仅提取正则表达式语句的某些部分?例如,如果我有一个正则表达式语句

/\.\w+\s\{|\.\-\w+\s\{/

我可以在不破坏匹配的情况下删除发现的fullstop和花括号吗?

让我这样说吧;

我正在搜索我的样式表以使用上面的正则表达式语句查找所有类,所以类总是从一个fullstop开始,我需要找到该类的第一个大括号。一旦我找到它,我只需要没有fullstop和花括号的类的名称来存储在哈希映射中。

那么有没有办法从我的答案中删除这些?我已经尝试过.replace方法,但为了实现这一点,我需要实际的字符串,我无法使用我已存储的变量。我将附加我的代码以及帮助你们进一步了解。提前谢谢!

if (rules[j].constructor === CSSMediaRule) {
                mqrule = rules[j].cssText;
                console.log(mqrule);
                lines = (mqrule).split('\n');
                for (var c = 0; c < lines.length; c++) {
                    if (lines[c].match(/\.\w+\s\{|\.\-\w+\s\{/)) {
                        console.log("It works!");
                        console.log(lines[c].match(/\.\w+\s\{|\.\-\w+\s\{/));
                        newKey = lines[c].match(/\.\w+\s\{|\.\-\w+\s\{/);

                        //I'VE TRIED IT 2 WAYS BUT NEITHER WORK.
                        newKey = newKey.replace(".", "");
                        newKey = newKey.replace(/[^a-zA-Z0-9\.]+/g);
                        //ANY SUGGESTIONS?

                        MQHash[newkey] = newValue;
                        console.log(MQHash);
                    }
                }
                mqls['mql' + j] = window.matchMedia(rules[j].media.mediaText);
                mqls['mql' + j].addListener(mediaChange);
                mediaChange(mqls['mql' + j]);
            }

2 个答案:

答案 0 :(得分:0)

不确定我是否理解你的nedds,但是怎么样:

/\.-?(\w+)\s\{/

您想要的结果是在第1组。

答案 1 :(得分:0)

使用捕获组:

/\.(\w+)\s\{|\.(\-\w+)\s\{/

对于每个(),您将获得数组中的内容。

您应该使用它,因为它具有g全局标志:

re = /\.(\w+)\s\{|\.(\-\w+)\s\{/;
matches = re.exec(css);

现在matches是一个包含所有捕获组的数组。 您感兴趣的是索引1,因为索引0始终是您匹配的整个文本。