javascript - 语言代码剥离正则表达式

标签 javascript regex regex-lookarounds

我觉得我已经很接近这里的解决方案了,但我似乎不太明白。我的目标是一次获取一组字符串,[ 'en', 'en-us', 'en_us', 'zh-hans-TW' ] 并生成 [ 'en', 'en', 'en', 'zh-hans']。我尝试了几种不同的方法,但没有找到完全正确的解决方案。

我相信,这是我最接近的,匹配除了“en”之外的所有内容。

/([a-zA-Z-_]+)[-_].+/
(一个或多个 aA-zZ 字符或 -_ 后跟 - 或 _ 和其他字符)

我尝试了负前瞻(我不太擅长),并想出了这个超过匹配并捕获整个字符串的方法

/([a-zA-Z-_]+)(?![-_].+)/
(一个或多个 aA-zZ 字符或 -_ 后面不跟 - 或 _ 以及其他字符)

有人可以在这里指出正确的解决方案吗?

最佳答案

您可以删除不想保留的字符串的末端,而不是匹配您希望保留的字符串部分:

/[-_][a-z]+$/i

这是 Javascript 中的一个实现:

var array1 = [ 'en', 'en-us', 'en_us', 'zh-hans-TW' ];

var array2 = array1.map(function(str) {
  return str.replace(/[-_][a-z]+$/i, "");
});

console.log(array2);

这个输出:

[ 'en', 'en', 'en', 'zh-hans' ]

关于javascript - 语言代码剥离正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28843263/

相关文章:

javascript - 健康棒的制作方法

javascript - 需要高级正则表达式帮助

python - 提取系列对象之间的字符串

python正则表达式向前看正+负

regex - 负向前瞻被忽略

javascript - 如果与大小写不匹配,则搜索不会返回数组元素

javascript - 使用拼接删除数组元素后,Google Chrome 控制台未显示正确的数据

javascript - 从浏览器建立任意 TCP 连接

c# - 删除 C/C# 注释所需的正则表达式

java - 解析纯文本文件中的数据结构