捕获一个字符串(从某个点开始),用非特定字母开头的regex。

问题描述 投票:0回答:1

我正在编写一个regex,如果字符串不是以特定的字母开头,就可以捕获从某个点开始的所有内容。

更准确地说,我想捕获从 - 直到一个逗号,只有当这个字符串不以 pt.

全球化银行应抓住 -GB

但如果这个词是以 pt 我只是想跳过捕捉。

pt-BR 应该什么都不抓。

我创建了这个regex。

-[^,]*

它的工作原理很好,除了这也能捕获以... pt.

不幸的是,我不能使用lookbehinds,因为JS不支持,所以我试着使用一个负的lookahead,像这样。

^(?!pt).*

问题是这能捕获整个字符串,而不是从... -. 我试着更换了 .* 与开始捕捉的东西在 -但到目前为止,我还没有成功。

我对regex很陌生,所以任何指导都会很有帮助。

javascript regex regex-lookarounds
1个回答
1
投票

为了匹配 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 - 语境
© www.soinside.com 2019 - 2024. All rights reserved.