Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用regexp查找字符串中的可变字母组_Javascript_Regex - Fatal编程技术网

Javascript 使用regexp查找字符串中的可变字母组

Javascript 使用regexp查找字符串中的可变字母组,javascript,regex,Javascript,Regex,我正在FCC上执行一个基本算法脚本挑战,如果数组第一个元素中的字符串包含数组第二个元素中字符串的所有字母,我想返回true,否则返回false 我已经为此编写了一些代码。然而,我似乎无法通过一项测试: mutation(["hello", "Hello"]) 我曾尝试删除全局标志,并根据FCC社区的建议尝试使用构造函数表示法和文字表示法,但没有效果 代码如下: function mutation(arr) { let patt = new RegExp("[arr.1]", "i");

我正在FCC上执行一个基本算法脚本挑战,如果数组第一个元素中的字符串包含数组第二个元素中字符串的所有字母,我想返回
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");