gpt4 book ai didi

javascript - 获取已知格式的字符串的可变部分

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

我想检查一个字符串的特定格式,如果匹配,则将值赋给字符串特定部分的变量。

例如,字符串格式为 'num_{month}_{year}_10p',字符串为 'num_october_16_10p'。我想将可变字符串部分({month}{year})分配给变量。我事先不知道确切的字符串格式,所以我写了一个简单的函数:

function string(string, regexp, monthPart, yearPart) {
if(!(regexp instanceof RegExp) || !regexp.test(string)) {
return false;
}

// I know that delimiter is underscore
var parts = string.split('_');

return {
month: parts[month],
year: parts[year]
};
}

并像 test('num_october_16_10p',/num_[a-z]{3,9}_[0-9]{2}_10p/, 1, 2); 一样使用它生成正则表达式视情况而定。

有更好的方法吗?仅使用正则表达式?以及如何支持任何字符串格式(没有特定分隔符\split())?

最佳答案

这将适用于任何合理的分隔符和顺序,但期望月份名称是完整的英文名称或三个字母的缩写。年份可以是 2 位或 4 位数字。如果一个字符串包含多个可能的匹配项,则只考虑第一个:

function extractDateParts(s) {
return {
month: (s.match(/([^a-z]|^)(jan(uary)?|feb(ruary?)|mar(ch?)|apr(il)?|may|june?|july?|aug(ust)?|sep(tember)?|oct(ober)?|nov(ember)?dec(ember)?)(?![a-z])/i) || [])[2],
year: +(s.match(/([^a-z0-9]|^)(\d\d(\d\d)?)(?![a-z0-9])/) || [])[2] || undefined
};
}

console.log(extractDateParts('num_october_16_10p'));

关于javascript - 获取已知格式的字符串的可变部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45418318/

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