Regex 正则表达式,用于按特定规则匹配不包括数字的文本字符串
我有一些条件:Regex 正则表达式,用于按特定规则匹配不包括数字的文本字符串,regex,Regex,我有一些条件: ALFA ROMEO 4C BMW X7 BLACK BMW X7 BLACK COLOUR BMW X7 BMW BMW X 7 BMW 7 SERIES BMW 7SERIES BMW 7S BMW (X7) 我想得到: ALFA ROMEO 4C BMW X7 BLACK BMW X7 BLACK COLOUR BMW X7 BMW BMW X BMW BMW 7SERIES BMW 7S BMW 如果数字和字母不在一起,那么图案应该在它们前面 如果字母[A-Z]后没有
ALFA ROMEO 4C
BMW X7 BLACK
BMW X7 BLACK COLOUR
BMW X7
BMW
BMW X 7
BMW 7 SERIES
BMW 7SERIES
BMW 7S
BMW (X7)
我想得到:
ALFA ROMEO 4C
BMW X7 BLACK
BMW X7 BLACK COLOUR
BMW X7
BMW
BMW X
BMW
BMW 7SERIES
BMW 7S
BMW
[A-Z]
后没有字母[^A-Z]
和空格,则图案应位于字母[A-Z]
之前有点复杂,但这可能有效:
^[A-Z ]+?(\d[A-Z]|[A-Z]\d).*|^[A-Z ]+
您的匹配项将为$0
ALFA ROMEO 4C
BMW X7 BLACK
BMW X7 BLACK COLOUR
BMW X7
BMW
BMW X
BMW
BMW 7SERIES
BMW 7S
BMW
有点复杂,但这可能会起作用:
^[A-Z ]+?(\d[A-Z]|[A-Z]\d).*|^[A-Z ]+
您的匹配项将为$0
ALFA ROMEO 4C
BMW X7 BLACK
BMW X7 BLACK COLOUR
BMW X7
BMW
BMW X
BMW
BMW 7SERIES
BMW 7S
BMW
如果支持正向前瞻,您可以使用开始匹配
[a-Z]
,并在右侧不包含数字时重复匹配0+次[a-Z0-9]+
^[A-Z]+(?: (?![0-9]+\b)[A-Z0-9]+)*
解释
字符串的开头^
匹配1+次字符A-Z[A-Z]+
非捕获组(?:
匹配空格,断言右边的不仅仅是数字(?![0-9]+\b)`
匹配1+乘以字符A-Z或数字[A-Z0-9]+
)*
].forEach(str=>console.log(str.match(pattern)[0])代码>如果支持正向前瞻,则可以使用开始匹配
[a-Z]
,并在右侧不包含数字时重复匹配0+次[a-Z0-9]+
^[A-Z]+(?: (?![0-9]+\b)[A-Z0-9]+)*
解释
字符串的开头^
匹配1+次字符A-Z[A-Z]+
非捕获组(?:
匹配空格,断言右边的不仅仅是数字(?![0-9]+\b)`
匹配1+乘以字符A-Z或数字[A-Z0-9]+
)*
].forEach(str=>console.log(str.match(pattern)[0])代码>宝马7系
来自哪里?我只看到BMW 7series
@MonkeyZeus,fixed,thx@anubhava,因为“7”和“SERIES”(我的问题中的第1段)之间有空格。BMW 7series
来自哪里?我只看到BMW 7series
@MonkeyZeus,fixed,thx.@anubhava,因为“7”和“SERIES”(我的问题中的第一段)之间有空格。thanx,你的图案很好,但是如何让它与非[a-z]
符号一起工作呢?我猜\b
有问题。也许你可以试试^[^\d\s]+(?:(?![0-9]+\b)\s+*。
我的意思是:,它应该抓住最后一个字符串。如果字符串看起来像,模式应该在“BMW”之前,因为它不是西里尔文字。我使用这个版本的模式:。你的模式很好,thanx,但是如何使它与非[a-z]
符号一起工作?我猜\b
有问题。也许你可以试试^[^\d\s]+(?:(?![0-9]+\b)\s+*。
我的意思是:,它应该抓住最后一个字符串。若字符串看起来像,那个么模式应该在“BMW”之前,因为它不是西里尔文字。