Javascript 测试字符串是否包含组成另一个字符串的所有字符
我试图使用Javascript查看某个字符串是否包含构成另一个字符串的所有字符 例如,单词“hello”包含组成单词“hell”的所有字符。“hellowy”包含组成单词“yellow”的所有字符 最重要的是,无论两个字符串中的字符顺序如何,该方法都需要工作。此外,字符的数量也很重要。“Hel”并不包含组成“地狱”的所有字符。这严格地说是指字符数:一个需要两个l来组成“地狱”,而“Hel”只有一个 为了进一步澄清这个问题,我不担心在由字符串的字符组成子字符串之后,是否会留下一些“未使用”的字符。也就是说,“helll”仍然应该包含单词“hell”的所有字母 我如何才能有效地完成这项工作?也许有一个正则表达式解决方案?速度是个问题,但并非绝对关键。您可以使用:Javascript 测试字符串是否包含组成另一个字符串的所有字符,javascript,regex,string,algorithm,Javascript,Regex,String,Algorithm,我试图使用Javascript查看某个字符串是否包含构成另一个字符串的所有字符 例如,单词“hello”包含组成单词“hell”的所有字符。“hellowy”包含组成单词“yellow”的所有字符 最重要的是,无论两个字符串中的字符顺序如何,该方法都需要工作。此外,字符的数量也很重要。“Hel”并不包含组成“地狱”的所有字符。这严格地说是指字符数:一个需要两个l来组成“地狱”,而“Hel”只有一个 为了进一步澄清这个问题,我不担心在由字符串的字符组成子字符串之后,是否会留下一些“未使用”的字符。
每个
将在第一个falsy值中失败,然后它不会搜索每个字母。您可以使用:
每个
将在第一个falsy值中失败,然后它不会搜索每个字母。编辑,更新
此外,字符的数量也很重要。“Hel”不包含
所有角色组成“地狱”
您可以使用变量来存储布尔值,for..of
循环,字符串.prototype.indexOf()
检查,设置布尔值
变量,如果错误
则中断
循环
您还应该能够检查输入字符串.length
是否等于匹配字符串.length
在条件下,如果两个字符串.length
属性不相等,则将变量设置为false
var str = "hell";
var match = "hel";
var bool = true;
for (var prop of str) {
if (str.length !== match.length || match.indexOf(prop) === -1) {
bool = false; break;
}
};
console.log(bool); // false
编辑,更新
此外,字符的数量也很重要。“Hel”不包含
所有角色组成“地狱”
您可以使用变量来存储布尔值,for..of
循环,字符串.prototype.indexOf()
检查,设置布尔值
变量,如果错误
则中断
循环
您还应该能够检查输入字符串.length
是否等于匹配字符串.length
在条件下,如果两个字符串.length
属性不相等,则将变量设置为false
var str = "hell";
var match = "hel";
var bool = true;
for (var prop of str) {
if (str.length !== match.length || match.indexOf(prop) === -1) {
bool = false; break;
}
};
console.log(bool); // false
如果字母的数量很重要,那么可能是这样的:
function test(string, substring) {
var regexp = new RegExp(substring.split("").sort().map(function(s) { return s + "+"; }).join(""));
return regexp.test(string.split("").sort().join(""));
}
这比上面的答案慢,但如果字符串中有一些重复,则可以缓存并获得比其他答案更好的速度性能:
var cache1 = { };
var cache2 = { };
function test2(string, substring) {
var regexp = cache1[substring];
if (!regexp) {
regexp = new RegExp(substring.split("").sort().map(function(s) { return s + "+"; }).join(""));
cache1[substring] = regexp;
}
var string2 = cache2[string];
if (!string2) {
string2 = string.split("").sort().join("");
cache2[string] = string2;
}
return regexp.test(string2);
}
如果字母的数量很重要,那么可能是这样的:
function test(string, substring) {
var regexp = new RegExp(substring.split("").sort().map(function(s) { return s + "+"; }).join(""));
return regexp.test(string.split("").sort().join(""));
}
这比上面的答案慢,但如果字符串中有一些重复,则可以缓存并获得比其他答案更好的速度性能:
var cache1 = { };
var cache2 = { };
function test2(string, substring) {
var regexp = cache1[substring];
if (!regexp) {
regexp = new RegExp(substring.split("").sort().map(function(s) { return s + "+"; }).join(""));
cache1[substring] = regexp;
}
var string2 = cache2[string];
if (!string2) {
string2 = string.split("").sort().join("");
cache2[string] = string2;
}
return regexp.test(string2);
}
进行一些培训我想出了一个办法:
function test(str, substring) {
var arr_str = str.toLowerCase().split('');
var arr_substr = substring.toLowerCase().split('');
return arr_substr.filter(function(each) {
return arr_str.indexOf(each) === -1;
}).length === 0;
}
console.log(test("Alien", "line")); // true
console.log(test("Hello", "hello")); // true
console.log(test("hello", "hey")); // false
进行一些培训我想出了一个办法:
function test(str, substring) {
var arr_str = str.toLowerCase().split('');
var arr_substr = substring.toLowerCase().split('');
return arr_substr.filter(function(each) {
return arr_str.indexOf(each) === -1;
}).length === 0;
}
console.log(test("Alien", "line")); // true
console.log(test("Hello", "hello")); // true
console.log(test("hello", "hey")); // false
这个符号是做什么的[…string]
另外,集是内置的JS功能吗?明白了。如果不允许重复,这仍然有效吗?也就是说,如果string=“hel”
和substring=“hell”
函数应该返回false。换句话说,字符的数量很重要。例如,它可能是:((新设置).add,mySet)
@guest271314此时您或我对此无能为力。还有,这就是为什么我会投票给所有试图回答我问题的人。这个符号有什么作用[…string]
另外,集是内置的JS功能吗?明白了。如果不允许重复,这仍然有效吗?也就是说,如果string=“hel”
和substring=“hell”
函数应该返回false。换句话说,字符的数量很重要。例如,它可能是:((新设置).add,mySet)
@guest271314此时您或我对此无能为力。还有,这就是为什么我会投票给所有试图回答我问题的人。“Hel”并不是包含所有组成“hell”的字符<代码>“hell”
确实包含构成“hell”
的所有字符。你是说区分大小写吗?不是。只是指字符的数量。你们需要两个l来表示“地狱”这个词,而“地狱”只有一个。注意,这是一个重要的要求,在最初的问题中似乎并没有包括在内?您应该能够检查输入字符串。长度等于匹配的字符串。长度我现在要添加它。“Hel”不包含组成“hell”的所有字符。“”<代码>“hell”
确实包含构成“hell”
的所有字符。你是说区分大小写吗?不是。只是指字符的数量。你们需要两个l来表示“地狱”这个词,而“地狱”只有一个。注意,这是一个重要的要求,在最初的问题中似乎并没有包括在内?您应该能够检查输入字符串。长度等于匹配字符串。长度我现在将添加它。