Javascript 使用regexp查找字符串中的可变字母组
我正在FCC上执行一个基本算法脚本挑战,如果数组第一个元素中的字符串包含数组第二个元素中字符串的所有字母,我想返回Javascript 使用regexp查找字符串中的可变字母组,javascript,regex,Javascript,Regex,我正在FCC上执行一个基本算法脚本挑战,如果数组第一个元素中的字符串包含数组第二个元素中字符串的所有字母,我想返回true,否则返回false 我已经为此编写了一些代码。然而,我似乎无法通过一项测试: mutation(["hello", "Hello"]) 我曾尝试删除全局标志,并根据FCC社区的建议尝试使用构造函数表示法和文字表示法,但没有效果 代码如下: function mutation(arr) { let patt = new RegExp("[arr.1]", "i");
true
,否则返回false
我已经为此编写了一些代码。然而,我似乎无法通过一项测试:
mutation(["hello", "Hello"])
我曾尝试删除全局标志,并根据FCC社区的建议尝试使用构造函数表示法和文字表示法,但没有效果
代码如下:
function mutation(arr) {
let patt = new RegExp("[arr.1]", "i");
return patt.test(arr[0]);
}
mutation(["hello", "Hello"])
函数应该返回true
,而不是返回false
。我的代码怎么了?newregexp(“[arr.1]”,“i”)
使用[arr.1]
(字面意思)作为正则表达式,这就是它不起作用的原因
我不会使用正则表达式,直接使用更简单。例如:
function mutation(arr) {
const lc = arr[0].toLowerCase();
return [...arr[1].toLowerCase()].every(ch => lc.includes(ch));
}
…或使搜索字符串不是线性搜索:
function mutation(arr) {
const chars = new Set([...arr[0].toLowerCase()]);
return [...arr[1].toLowerCase()].every(ch => chars.has(ch));
}
…但是如果您有使用regex,您可以生成一个数组,其中包含arr[1]
([“Hello”、“oHell”、“loHel”、…]
)(可能使用),然后使用开头/结尾锚(^
,$
)和替代(
)创建正则表达式在所有排列中:
let permutations = /*...use the linked answers to create permutations...*/;
let patt = new RegExp("^(?:" + permutations.join("|") + ")$", "i");
如果arr[1]
可能包含正则表达式中特殊的字符,则需要对其进行转义(可能使用):
(同样:没有内置的
escapeRegExp
,请参阅上面链接的问题的答案以了解如何创建一个。)您希望与[arr.1]
模式匹配什么?它匹配单个字符,a
、r
、
或1
。没有类似于hello
或hello
的内容。您不需要正则表达式:[…秒]。每(x=>一次。包括(x))
感谢您指出这一点。(出于某种原因,FCC允许它通过大多数测试,这就是为什么我没有发现那个错误)。但是当我使用你的代码时,它通过了测试,即使它只与一个字母匹配。我希望它能匹配所有的字母。@raeign-Doh!当然有。:-)(RegExp版本。其他版本是正确的。)我不会为此使用RegExp,我会使用其他解决方案之一。但是,嗯……哇,我现在明白为什么没有人想用正则表达式来回答这个问题了。谢谢你的帮助!
let patt = new RegExp("^(?:" + permutations.map(escapeRegExp).join("|") + ")$", "i");