我正在使用 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)
考虑到任何包含在其中的单词都是{}变量,替换变量的适当值将转换test为data.
问题陈述是如果问题有解决方案,我们需要找到每个单词的值,否则从方法返回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)
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |