Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 捕获一个正则表达式不以某些字母开头的字符串(从某个点开始)_Javascript_Regex_Regex Lookarounds - Fatal编程技术网

Javascript 捕获一个正则表达式不以某些字母开头的字符串(从某个点开始)

Javascript 捕获一个正则表达式不以某些字母开头的字符串(从某个点开始),javascript,regex,regex-lookarounds,Javascript,Regex,Regex Lookarounds,我正在编写一个正则表达式,如果字符串不是以某些字母开头,它将从某个点捕获所有内容 更准确地说,我想捕获从-到逗号的所有内容,前提是该字符串不以pt开头 en GB应捕获-GB 但是如果单词以pt开头,我只想跳过捕获: pt BR不应捕获任何内容 我创建了这个正则表达式: -[^,]* 除了捕获以pt开头的字符串外,它工作得很好 不幸的是,我不能使用lookbehinds,因为JS不支持它,所以我尝试使用如下的负前瞻: ^(?!pt).* 问题是,这会捕获整个字符串,而不是从-捕获。我试着用从

我正在编写一个正则表达式,如果字符串不是以某些字母开头,它将从某个点捕获所有内容

更准确地说,我想捕获从
-
到逗号的所有内容,前提是该字符串不以
pt
开头

en GB应捕获
-GB

但是如果单词以
pt
开头,我只想跳过捕获:

pt BR
不应捕获任何内容

我创建了这个正则表达式:

-[^,]*
除了捕获以
pt
开头的字符串外,它工作得很好

不幸的是,我不能使用lookbehinds,因为JS不支持它,所以我尝试使用如下的负前瞻:

^(?!pt).*
问题是,这会捕获整个字符串,而不是从
-
捕获。我试着用从
-
开始捕获的东西替换
*
,但到目前为止我还没有成功


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

要匹配
pt-
和字符串开头的任意两个字母或任意两个其他字母,您可以使用

text.match(/^(?:pt-[a-zA-Z]{2}|[a-zA-Z]{2})/)
text.replace(/\b(?!pt-)([A-Za-z]{2})-[a-zA-Z]{2}\b/, '$1')
看。详情:

  • ^
    -字符串的开头
  • (?:pt-[a-zA-Z]{2}|[a-zA-Z]{2})
    -两种备选方案之一:
    • pt-[a-zA-Z]{2}
      -
      pt-
      和任意两个ASCII字母
    • |
      -或
    • [a-zA-Z]{2}
      -任意两个ASCII字母
出于某种原因,您似乎需要使用
.replace
方法。那么,你可以使用

text.match(/^(?:pt-[a-zA-Z]{2}|[a-zA-Z]{2})/)
text.replace(/\b(?!pt-)([A-Za-z]{2})-[a-zA-Z]{2}\b/, '$1')
看。详情:

  • \b
    -单词边界
  • (?!pt-
    -当前位置右侧不允许立即使用
    pt-
  • ([A-Za-z]{2})
    -第1组:任意两个ASCII字母
  • -
    -连字符
  • [a-zA-Z]{2}
    -任意两个ASCII字母
  • \b
    -单词边界

是否只需要
s.match(/^(?!pt)[A-Za-z]{2}([^,]+)/)[1]
?问题是它匹配整个字符串。我只想匹配从-开始的所有内容,但您可以只返回捕获的文本,这不是问题,因为您可以访问代码。或者你呢?我知道,但理想情况下,我应该替换每一个事件,而不是对每个捕获的文本进行字符串操作。你知道有没有办法做到这一点吗?很难得到你想要的,因为我仍然不明白你的最终结果应该是什么样子。匹配什么并不重要,更重要的是捕获什么以及以后在代码中做什么。好的,让我们想象一下您拥有
en GB
字符串。你需要得到的最终结果是什么?字符串
en
?您需要使用
来执行此操作。是否替换
?尝试
text.replace(/\b(?!pt-)([A-Za-z]{2})-[A-Za-z]{2}\b/,'$1')