【发布时间】:2020-05-01 14:14:13
【问题描述】:
我正在编写一个正则表达式,如果字符串不是以某些字母开头,它会从某个点捕获所有内容。
更准确地说,我想捕获从 - 到逗号的所有内容,前提是该字符串不以 pt 开头。
zh-CN 应该捕获-GB
但如果单词以pt 开头,我只想跳过捕获:
pt-BR 应该什么都不捕获。
我创建了这个正则表达式:
-[^,]*
这很好用,除了它还捕获以pt 开头的字符串。
不幸的是我不能使用lookbehinds,因为它不受JS支持,所以我尝试使用这样的否定lookahead:
^(?!pt).*
问题是这会捕获整个字符串,而不是来自-。我尝试用在-开始捕获的东西替换.*,但到目前为止我还没有成功。
我对正则表达式有点陌生,所以任何指导都会有所帮助。
【问题讨论】:
-
你只想要
s.match(/^(?!pt)[A-Za-z]{2}(-[^,]+)/)[1]吗? -
问题在于它匹配整个字符串。我只想匹配从 - 及以后的所有内容
-
但是您可能只返回捕获的文本,这不是问题,因为您可以访问代码。还是你?
-
我愿意,但理想情况下我应该只替换每个出现,而不是对每个捕获的文本进行字符串操作。你知道是否有办法实现这一目标?
-
很难得到你想要的,因为我还是不明白你的最终结果应该是什么样子。你匹配什么并不重要,更重要的是你捕获了什么以及你稍后在代码中做什么。好的,让我们想象一下你有
en-GB字符串。您需要得到的最终结果是什么?一个字符串en?你需要用.replace来做吗?试试text.replace(/\b(?!pt-)([A-Za-z]{2})-[a-zA-Z]{2}\b/, '$1')
标签: javascript regex regex-lookarounds