gpt4 book ai didi

javascript - 字符串操作以查找字符串中的变量

转载 作者:行者123 更新时间:2023-12-03 07:25:22 27 4
gpt4 key购买 nike

我正在使用 JS,并且有一个问题,我有两个字符串,例如:

var test = "This is a {feature1} and {feature2} boy.";
var data = "This is a very good and smart boy.";

考虑到 {} 中包含的任何单词都是变量,替换变量的适当值会将 test 转换为 data

问题的陈述是,如果问题有解决方案,我们需要找到每个单词的值,否则,从方法中返回 false。

因此,在上面的示例中,我们的返回值为

{
feature1: 'very good',
feature2: 'smart'
}

到目前为止,我已经尝试了下面的代码,它似乎可以工作,但对于这个操作来说似乎有点复杂。

function matchAndGetVar(test, data) {
function multiSplit(data, splitters) {
function helper(dataArray, splitter) {
return dataArray.reduce((acc, curr) => {
acc.push(...curr.split(splitter));
return acc;
}, []);
}

return splitters.reduce((acc, curr) => helper(acc, curr), [data]).map((f, index) => {
if (index % 2 === 0) return f;
return '{' + f + '}';
});
}

var splittedTestData = multiSplit(test, ['{', '}']);

return splittedTestData.reduce((acc, curr, index) => {
if (curr.startsWith("{") && curr.endsWith("}")) {}
else if (index === 0) {
if (data.startsWith(curr)) {
data = data.substr(curr.length);
} else {
return false;
}
} else if (splittedTestData[index] === "") {
if (acc)
acc[splittedTestData[index - 1].substr(1, splittedTestData[index - 1].length - 2)] = data;
data = "";
} else {
const index1 = data.indexOf(splittedTestData[index]);
if (index1 === -1) return false;
if (acc)
acc[splittedTestData[index - 1].substr(1, splittedTestData[index - 1].length - 2)] = data.substr(0, index1);
data = data.substr(index1 + splittedTestData[index].length);
}
return acc;
}, {});
}

var test = "This is a {feature1} and {feature2} boy.";
var data = "This is a very good and smart boy.";

console.log(matchAndGetVar(test, data));

任何人都可以建议一些更简单的方法或对实现进行任何修改吗?

最佳答案

您可以使用正则表达式,有一个示例

var test = "This is a {feature1} and {feature2} boy.";
var data = "This is a very good and smart boy.";

let resp = findFeatures(test);
console.log(resp)
function findFeatures(data) {

let features = {};

/* EXTRACTING FEATURE KEYS */
data.match(/\{(.+?)\}/g).forEach(result => {
features[result.slice(1, -1)] = ""
})

let matches = matchWithData(test);
if (Object.keys(features).length > 0 && matches.length == Object.keys(features).length) { // if pattern results matches with data
Object.keys(features).forEach((feature, index) => {
features[feature] = matches[index]
})
}
return features;
}

function matchWithData(test) {

let regex = test.replace(/\{.+?\}/g, "(.*)");

if (new RegExp(regex).test(data)) // data matches with test
return data.match(new RegExp(regex)).slice(1); // get features
return [];
}

关于javascript - 字符串操作以查找字符串中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59633387/

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