字符串操作以在字符串中查找变量

Nik*_*yal 2 javascript string

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

var test = "This is a {feature1} and {feature2} boy.";
var data = "This is a very good and smart boy.";
Run Code Online (Sandbox Code Playgroud)

考虑到任何包含在其中的单词都是{}变量,替换变量的适当值将转换testdata.

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

所以,在上面的例子中,我们有一个返回值

{
    feature1: 'very good',
    feature2: 'smart'
}
Run Code Online (Sandbox Code Playgroud)

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

var test = "This is a {feature1} and {feature2} boy.";
var data = "This is a very good and smart boy.";
Run Code Online (Sandbox Code Playgroud)

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

小智 5

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

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 [];
}
Run Code Online (Sandbox Code Playgroud)