javascript - 在 2 个字符串中搜索占位符值
问题描述
我在 JavaScript 中有两个字符串,比如
var description = "<DP_A>.<Del.Dce Lks.{Link}>.<Pl.Rrs Bk 0.310-PT-304_({strm})>"
var Title = "<DP_A>.<Del.Dce Lks.1>.<Pl.Rrs Bk 0.310-PT-304_(1)>"
这里 {Link} 和 {strm} 是占位符,或者更可能是 {} 之间的任何内容是占位符
我需要比较像描述和标题这样的字符串来查找占位符值,输出需要像
{"Link" : 1, "strm" : 1 }
或数组
[{Link" : 1, "strm" : 1}]
我已经尝试了一些 RegEx 但没有工作,有什么帮助吗?
if (description.includes("{")) {
var found = [], // an array to collect the strings that are found
rxp = /{([^}]+)}/g,
curMatch;
while (curMatch = rxp.exec(description)) {
found.push(curMatch[1]);
}
}
我能够获得占位符数组,但无法在标题字符串中找到值。
解决方案
您可以获取所有部分,然后将值从标题字符串中拼接出来。
"<DP_A>.<Del.Dce Lks.{Link}>.<Pl.Rrs Bk 0.310-PT-304_({strm})>",
"<DP_A>.<Del.Dce Lks. 1 >.<Pl.Rrs Bk 0.310-PT-304_( 1 )>";
function getParts(pattern, values) {
var result = {}, value, p1, p2 = 0;
(pattern.match(/[^{}]+/g) || []).forEach((s, i, a) => {
if (i % 2) return Object.assign(result, { [s]: value });
p1 = values.indexOf(s, p2),
p2 = values.indexOf(a[i + 2], p1);
value = values.slice(p1 + s.length, p2 === -1 ? undefined : p2);
});
return result;
}
var description = "<DP_A>.<Del.Dce Lks.{Link}>.<Pl.Rrs Bk 0.310-PT-304_({strm})>{last}",
title = "<DP_A>.<Del.Dce Lks.abcdef>.<Pl.Rrs Bk 0.310-PT-304_(ghijklöööö)>fubar";
console.log(getParts(description, title));
带有for
声明并重用已知位置。
function getParts(pattern, values) {
var parts = pattern.match(/[^{}]+/g),
result = {}, p1, p2, i;
if (!parts || parts.length < 2) return {};
p1 = values.indexOf(parts[0]);
for (i = 1; i < parts.length; i += 2) {
p2 = values.indexOf(parts[i + 1], p1);
Object.assign(result, { [parts[i]]: values.slice(p1 + parts[i - 1].length, p2 === -1 ? undefined : p2) });
p1 = p2;
}
return result;
}
var description = "<DP_A>.<Del.Dce Lks.{Link}>.<Pl.Rrs Bk 0.310-PT-304_({strm})>{last}",
title = "<DP_A>.<Del.Dce Lks.abcdef>.<Pl.Rrs Bk 0.310-PT-304_(ghijklöööö)>fubar";
console.log(getParts(description, title));
推荐阅读
- javascript - 从 jQuery 到原生 javascript
- python - 重新缩放 Pyspark 数据框以填充某个时间跨度
- python - 如何在 django 的 html 文件中动态添加链接?
- ios - 如何设置不支持模拟器的私有 Pod
- forms - Codeigniter 4 表单验证不起作用
- javascript - 检查 Firestore 实时更改
- arrays - 如何用jq获取数组的索引
- java - 如何通过忽略某些属性和子元素顺序来比较 2 个 json
- docker - Quarkus:测试容器内置的原生镜像
- python-3.x - 如何嵌套带有 IF 语句的 For 循环以返回新列表?