如果以字符开头,则RegEx不匹配?

时间:2017-11-17 18:34:07

标签: javascript regex lookbehind

我有这个正则表达式:

/(((\w+)|(\.\w+)|(\#\w+)|\*)(\[(.+(=".+"|\*".+"|\^".+"|))\])?(::|:)?)+(?=[ \S]*\{)/gm

我正在尝试使用它来匹配CSS选择器。考虑这个伪代码CSS输入:

.main {
  property: value;
}

.one, .two a[href$=".com"] {
  .subclass {
    property: value;
  }
}

.test:before, .test:after:active {}

上面的模式将返回以下匹配项:

['.body', '.one', '.two', 'a[href$=".com"]', '.subclass', '.test:before', '.test:after:active']

我正在尝试修改模式,以便psuedo选择器不匹配。因此,所有其他匹配项仍然有效,但.test:before应该只是.test.test:after:active也应该匹配.test。如果第一个字符是:,如果没有负面的后视,或者不匹配的方法,我想不出办法。

我在Node中实现了这个,我不想将我的脚本锁定到Node> 9.2.0只是在我的正则表达式中使用负面的后视。

任何想法都将不胜感激!

1 个答案:

答案 0 :(得分:1)

(?!.*:)(?:[.#]\w+|\w+\[.*\])

你可以使用这样的东西吗?

这使用了一个负向前瞻,以确保它不会捕获旁边有冒号的任何内容,以及使用matued for psuedo css元素的简化版本。

See it working here