我正在尝试用JavaScript编写一个正则表达式,该表达式将匹配任何字符串,只要它以空格开头,然后是octothorpe(#),然后是字符即可。但是,我希望此表达式排除十六进制代码。
我有这个表达式来捕获#tags:
/([\s]#[^<\s]+)/g
并且我有一个表达式可以捕获我的较大程序将接收到的格式为(#xxxxxx)的十六进制代码:
/(#[0-9a-fA-F]{6,6}\b)/g
但我不知道如何将它们放在一起,这样我最终得到的是第一个表达式而不是第二个表达式所描述的匹配项。
我想在一个正则表达式语句中做所有事情。如果这不可能,我想知道一种使用正则表达式和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]+)
我在开始时就添加了使用散列立即开始字符串而无需空格的可能性。
请参阅正则表达式测试器
注意:{6,6}
的确与快捷方式完全相同:{6}
。如在regular-expressions.info上所述:
还有一个附加的量词,可让您指定令牌可以重复多少次。
语法为{min,max},其中min为零或表示最小匹配数的正整数,并且max是等于或大于min的整数,表示最大匹配数。[...]省略逗号和max都将使引擎在最短的时间内精确地重复令牌。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句