【问题标题】:Regular Express: Selecting text that doesn't begin with a certain character正则表达式:选择不以某个字符开头的文本
【发布时间】:2015-04-19 04:58:52
【问题描述】:

我正在尝试使用正则表达式来解析基本的 CSS 选择器,例如:“tag.class#id tag”

我已经能够使用/\.\w+/ 匹配类,使用/#\w+/ 匹配ID,并且我已经能够使用/[^\.#\w+]\w+/ 匹配最终标签(加上它前面的空格),但到目前为止我有无法找到匹配这两个标签的方法。

我尝试匹配不以'#'和'.'开头的单词,例如使用/[^#.]\w+/(匹配除'.'和'#'之外的所有单词),或使用像/(?<!#)\w+/这样的lookbehind (不匹配),失败了。

有没有办法匹配一组单词字符,只要它不以某个字符开头,比如'。'还是“#”?

【问题讨论】:

    标签: regex


    【解决方案1】:

    如果你使用:

    /\w+/g
    

    然后它会返回所有包含这些字符的单词:

    ]a-zA-Z0-9_]
    

    这不包括.#

    但是,如果您想捕获不是.# 的任何非空格字符组,请使用:

    /[^.#\s]+/g
    

    这将匹配除.# 以及空格之外的任何内容。

    如果您支持后视,那么您可以使用:

    /(?<![.#])\b([^.#\s]+)\b/g
    

    RegEx Demo

    【讨论】:

    • 不幸的是,它匹配“tag”、“class”、“id”和“tag”,而我试图只匹配“tag”的两个实例。
    • 假设输入是"tag.class#id tag",你的预期输出是什么?
    • 还要告诉你用什么语言做这个。
    • @anubhava ,他使用哪种语言(可能是 CSS?)是否重要,我认为 RegEx 在所有语言中都是相同的。如有错误请指正。谢谢!
    • @anubhava 我正在使用 Ruby。预期的输出将是['tag', 'tag'] 的匹配集。 'tag' 本身是通用的,但在真正的 CSS 用例中,它类似于 "div.class_name p",它会匹配 ['div', 'p']
    猜你喜欢
    • 2022-07-06
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    • 2014-10-28
    • 2015-12-11
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多