匹配#标记但不匹配十六进制代码的Regex表达式

Regex expression that matches #tags but not hex codes

本文关键字:代码 Regex 表达式 十六进制 不匹配 匹配      更新时间:2023-09-26

我正在尝试用JavaScript编写一个正则表达式,只要它以空格、八叉(#)和字符开头,它就会匹配任何字符串。但是,我希望此表达式排除十六进制代码。

我有一个捕捉#tags:的表达式

/(['s]#[^<'s]+)/g

我有一个表达式,它以我的大型程序将接收的格式(#xxxxxxx)捕获十六进制代码:

/(#[0-9a-fA-F]{6,6}'b)/g

但我不知道如何将它们组合在一起,这样我最终得到的匹配由第一个表达式描述,而不是由第二个表达式描述。

我希望在一个regex语句中完成所有操作。如果这不可能,我想知道一种方法,使用regex和JavaScript函数的组合来获得所有以#开头的非十六进制字符串。如果有帮助的话,我会使用jQuery和Backbone.js。

额外信贷:

这两者之间的区别是什么:

/(#[0-9a-fA-F]{6,6}'b)/g

这个:

/(#[0-9a-fA-F]{6}'b)/g

我一直在使用https://regex101.com编写和测试我的表达式,两者似乎给出了相同的结果。

您可以在第一个中使用第二个正则表达式作为负前瞻((?!

(?:'s|^)(#(?!['da-fA-F]{6}'b)[^<'s]+)

我在开始时添加了立即用哈希开始字符串的可能性,而不需要空格。

参见Regex测试仪

注意:{6,6}确实与{6}的捷径完全相同。如定期出口新闻所述。信息:

还有一个额外的量词,允许您指定一个令牌可以重复多少次。

语法为{min,max},其中min为零或表示最小匹配数的正整数,max是等于或大于min的整数,表示最大匹配数。[…]省略逗号和最大告诉引擎准确地重复最小次令牌。