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}
和任意两个ASCII字母pt-
-或|
-任意两个ASCII字母[a-zA-Z]{2}
.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-
-第1组:任意两个ASCII字母([A-Za-z]{2})
-连字符-
-任意两个ASCII字母[a-zA-Z]{2}
-单词边界\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')