gpt4 book ai didi

javascript regex - 返回值,除非后面有或前面有

转载 作者:行者123 更新时间:2023-11-30 15:50:09 25 4
gpt4 key购买 nike

我有几个不同的字符串组合,我试图以这种格式返回结果:

[0-9]{1,3}GB 除非它在字符串中某处以 SD 开头,或者在 RAM 之后字符串中的某处。

因此:

8 GB 应返回:8 GB

8 GB RAM 应该返回:

SD 卡 8 GB 应返回:

microSD,最大 32 GB 应返回:

16 GB 应返回:16 GB

(([0-9]{1,3}GB)(?!\s+RAM)(?!SD)) 不适用于基于 javascript 的正则表达式。

有什么想法可以从哪里开始吗?

最佳答案

以下是您可以使用单个正则表达式执行的操作,使用交替来检查是否存在捕获组:

var arr = ['8 GB', '8 GB RAM', 'SD Card 8 GB', 'microSD, up to 32 GB', '16 GB'];
var re = /SD.*\d{1,3}\s*GB|(\d{1,3}\s*GB)(?!.*\bRAM)/i;

var res = [];
for (i=0; i<arr.length; i++) {
var m = arr[i].match(re);
res.push(m && m[1] || '');
}

console.log(res);
//=> ["8 GB", "", "", "", "16 GB"]

正则表达式分解:

  • SD.*\d{1,3}\s*GB - 匹配SD后跟 1-3 位数字和 GB
  • | - 或者
  • (\d{1,3}\s*GB) - 匹配 1-3 位数字和 GB将其分组到捕获组#1
  • (?!.*\bRAM) - 如果我们有 RAM,则否定前瞻使匹配失败在当前职位之后

所以我们交替匹配并忽略第一部分,只保留组中的第二部分。我们只在结果中存储捕获的组。

关于javascript regex - 返回值,除非后面有或前面有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39497278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com