Javascript 基于第一个字符或以前出现的字符限制图案的一部分
我有以下regexp:Javascript 基于第一个字符或以前出现的字符限制图案的一部分,javascript,regex,Javascript,Regex,我有以下regexp: /^(?:(?:>|<)?[a-zA-Z]+(?:(?:\+|-)\d*\.?\d*(?:em)?)?)(?:<[a-zA-Z]+(?:(?:\+|-)\d*\.?\d*(?:em)?)?)?$/ 我的问题是,如果第一个实例以一个开头,您可以在插入符号^之后使用一个非常早的负前瞻: (?!<[^<\s]*<) 排成一行: ^(?!<[^<\s]*<)(?:[<>]?[a-zA-Z]+(?:[-+]\d+
/^(?:(?:>|<)?[a-zA-Z]+(?:(?:\+|-)\d*\.?\d*(?:em)?)?)(?:<[a-zA-Z]+(?:(?:\+|-)\d*\.?\d*(?:em)?)?)?$/
我的问题是,如果第一个实例以一个
开头,您可以在插入符号^
之后使用一个非常早的负前瞻:
(?!<[^<\s]*<)
排成一行:
^(?!<[^<\s]*<)(?:[<>]?[a-zA-Z]+(?:[-+]\d+(?:\.\d+)?(?:em)?)?)(?:<[a-zA-Z]+(?:[-+]\d+(?:\.\d+)?(?:em)?)?)?$
^(?!只要替换(?:(?:>| |)第二种方法在JS引擎中似乎不起作用,因为反向引用:。很好。我删除了第二种方法。JS中未捕获的捕获组似乎在其反向引用中初始化为零长度字符串。如果捕获第一个字符,可以使用第二种方法(不管是什么)在向前看中..这样捕获就永远不会为空。@不分心是的,您只需要一个负向前看(?)?![@Undistraction不客气。您可能还想了解一下正则表达式。我现在知道答案,但为了让答案对其他人更有用,请添加对(?!.@Undistraction-(?!.*我删除了扩展版中额外的?
,这使得@revo有意义。谢谢。
<alpha<bravo
(?!<[^<\s]*<)
^
(?!<[^<\s]*<) # We have this extra one
(?:
[<>]?
[a-zA-Z]+
(?:[-+]\d+(?:\.\d+)?(?:em)?)?
)
(?:
<
[a-zA-Z]+
(?:[-+]\d+(?:\.\d+)?(?:em)?)?
)?
$
^(?!<[^<\s]*<)(?:[<>]?[a-zA-Z]+(?:[-+]\d+(?:\.\d+)?(?:em)?)?)(?:<[a-zA-Z]+(?:[-+]\d+(?:\.\d+)?(?:em)?)?)?$