js怎么把这么一段字符串中的中间特定字符串拿出来呢?

比如一段字符串是:
robb=123sdfdsf;thhh=aksjdasbjkafhu34;like=shbsbdkjasdbjkas;

然后我想拿到
thhh=aksjdasbjkafhu34;
其他的不要
怎么写呢,找个会的人

阅读 2.3k
4 个回答

str.match(/thhh=.+?;/)

const source = "robb=123sdfdsf;thhh=aksjdasbjkafhu34;like=shbsbdkjasdbjkas;";

// 先按 ; 拆分,再按 = 拆分,就可以拿到一组键值对
const entries = source.split(";")
    .filter(it => it)
    .map(it => it.split("=", 2));

console.log(entries);
// 输出:
// [
//     [ 'robb', '123sdfdsf' ],
//     [ 'thhh', 'aksjdasbjkafhu34' ],
//     [ 'like', 'shbsbdkjasdbjkas' ]
// ]

const found = entries
    .filter(([key]) => key == "thhh")
    .map(pair => pair.join("="))
    // .map(([key, value]) => `${key}=${value}`)    // 上面那句也可以改成这样
    .concat([""])       // 拼这个是为了结尾的分号
    .join(";");
console.log(found);
// 输出:
// thhh = aksjdasbjkafhu34;

// 键值对可以直接生成对象,有这个对象想拿什么都方便
const model = Object.fromEntries(entries);
console.log(model);
// 输出:
// {
//     robb: '123sdfdsf',
//     thhh: 'aksjdasbjkafhu34',
//     like: 'shbsbdkjasdbjkas'
// }

为啥用 ; 分隔?

如果格式固定的话,str.split(';').find(item => item.startsWith('thhh=')) 就行了。

/^\w+=\w+;(.*);\w+=\w+;$/.match('robb=123sdfdsf;thhh=aksjdasbjkafhu34;like=shbsbdkjasdbjkas;')

不过,有一些场景不覆盖。

推荐问题