使用不以某些字母开头的正则表达式捕获字符串(从某个点开始)
Capture a string (from a certain point) with regex not starting with certain letters
我正在编写一个正则表达式,如果字符串不以某些字母开头,它会从某个点捕获所有内容。
更准确地说,我想捕获从 -
到逗号的所有内容,前提是此字符串不以 pt
.
开头
en-GB 应该捕获 -GB
但如果单词以 pt
开头,我只想跳过捕获:
pt-BR
应该什么也抓不到。
我创建了这个正则表达式:
-[^,]*
除了它还捕获以 pt
开头的字符串外,效果很好。
不幸的是,我不能使用 lookbehinds,因为它不受 JS 支持,所以我尝试使用像这样的负面前瞻:
^(?!pt).*
问题是这捕获了整个字符串,而不是来自 -
。我尝试用在 -
开始捕获的内容替换 .*
,但到目前为止我还没有成功。
我对正则表达式有点陌生,所以任何指导都会有所帮助。
要匹配 pt-
和字符串开头的任意两个字母或任意两个其他字母,您可以使用
text.match(/^(?:pt-[a-zA-Z]{2}|[a-zA-Z]{2})/)
见regex demo。详情:
^
- 字符串开头
(?:pt-[a-zA-Z]{2}|[a-zA-Z]{2})
- 两种选择之一:
pt-[a-zA-Z]{2}
- pt-
和任意两个 ASCII 字母
|
- 或
[a-zA-Z]{2}
- 任意两个 ASCII 字母
出于某种原因,您似乎需要使用 .replace
方法。然后,您可以使用
text.replace(/\b(?!pt-)([A-Za-z]{2})-[a-zA-Z]{2}\b/, '')
参见 this regex demo。详情:
\b
- 单词边界
(?!pt-)
- 不允许pt-
紧靠当前位置 的右侧
([A-Za-z]{2})
- 第 1 组:任意两个 ASCII 字母
-
- 一个连字符
[a-zA-Z]{2}
- 任意两个 ASCII 字母
\b
- 单词边界
我正在编写一个正则表达式,如果字符串不以某些字母开头,它会从某个点捕获所有内容。
更准确地说,我想捕获从 -
到逗号的所有内容,前提是此字符串不以 pt
.
en-GB 应该捕获 -GB
但如果单词以 pt
开头,我只想跳过捕获:
pt-BR
应该什么也抓不到。
我创建了这个正则表达式:
-[^,]*
除了它还捕获以 pt
开头的字符串外,效果很好。
不幸的是,我不能使用 lookbehinds,因为它不受 JS 支持,所以我尝试使用像这样的负面前瞻:
^(?!pt).*
问题是这捕获了整个字符串,而不是来自 -
。我尝试用在 -
开始捕获的内容替换 .*
,但到目前为止我还没有成功。
我对正则表达式有点陌生,所以任何指导都会有所帮助。
要匹配 pt-
和字符串开头的任意两个字母或任意两个其他字母,您可以使用
text.match(/^(?:pt-[a-zA-Z]{2}|[a-zA-Z]{2})/)
见regex demo。详情:
^
- 字符串开头(?:pt-[a-zA-Z]{2}|[a-zA-Z]{2})
- 两种选择之一:pt-[a-zA-Z]{2}
-pt-
和任意两个 ASCII 字母|
- 或[a-zA-Z]{2}
- 任意两个 ASCII 字母
出于某种原因,您似乎需要使用 .replace
方法。然后,您可以使用
text.replace(/\b(?!pt-)([A-Za-z]{2})-[a-zA-Z]{2}\b/, '')
参见 this regex demo。详情:
\b
- 单词边界(?!pt-)
- 不允许pt-
紧靠当前位置 的右侧
([A-Za-z]{2})
- 第 1 组:任意两个 ASCII 字母-
- 一个连字符[a-zA-Z]{2}
- 任意两个 ASCII 字母\b
- 单词边界