我正在编写一个regex,如果字符串不是以特定的字母开头,就可以捕获从某个点开始的所有内容。
更准确地说,我想捕获从 -
直到一个逗号,只有当这个字符串不以 pt
.
全球化银行应抓住 -GB
但如果这个词是以 pt
我只是想跳过捕捉。
pt-BR
应该什么都不抓。
我创建了这个regex。
-[^,]*
它的工作原理很好,除了这也能捕获以... pt
.
不幸的是,我不能使用lookbehinds,因为JS不支持,所以我试着使用一个负的lookahead,像这样。
^(?!pt).*
问题是这能捕获整个字符串,而不是从... -
. 我试着更换了 .*
与开始捕捉的东西在 -
但到目前为止,我还没有成功。
我对regex很陌生,所以任何指导都会很有帮助。
为了匹配 pt-
和字符串开头的任意两个字母或其他任意两个字母,您可以使用
text.match(/^(?:pt-[a-zA-Z]{2}|[a-zA-Z]{2})/)
见 搜索引擎演示. 详情:
^
- 字符串的开始(?: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/, '$1')
请看 这个regex演示. 详。
\b
- 一字界(?!pt-)
- 没有 pt-
允许在当前位置的右侧([A-Za-z]{2})
- 第1组:任意两个ASCII字母-
- 连字符[a-zA-Z]{2}
- 任何两个ASCII字母\b
- 语境