Javascript 这个基本测试函数是如何工作的?

Javascript 这个基本测试函数是如何工作的?,javascript,regex,primes,Javascript,Regex,Primes,我在另一个编程社区看到了这个主要的测试代码 isPrime=n=>!/^.$|^(..+)\1+$/.test(Array(n+1)); 我能理解RegExp的东西,但我不能理解它是如何工作的。 为什么空数组在RegExp测试中?为什么它会起作用? 我搜索了一下,但找不到任何信息…:(首先,regex正在根据数组(n+1)进行测试)。当.test被传递一个非字符串时,它将被转换为字符串 字符串(数组(5))产生,,(4个逗号)字符串(数组(3))生成、(2个逗号)等。(数组的所有元素都由

我在另一个编程社区看到了这个主要的测试代码

isPrime=n=>!/^.$|^(..+)\1+$/.test(Array(n+1));
我能理解RegExp的东西,但我不能理解它是如何工作的。

为什么空数组在RegExp测试中?为什么它会起作用?

我搜索了一下,但找不到任何信息…:(

首先,regex正在根据
数组(n+1)进行测试)
。当
.test
被传递一个非字符串时,它将被转换为字符串

字符串(数组(5))
产生
,,
(4个逗号)<代码>字符串(数组(3))生成
(2个逗号)等。(数组的所有元素都由
连接起来,从而产生
长度-1
逗号)

因此,
isPrime(n)
导致正则表达式根据由
n
逗号组成的字符串进行测试

现在,有趣的一点是:正则表达式。第一部分是
^.$
,输入为1时的一个小例子。这并不重要,所以请忽略它

重要的部分是
^(..+)\1+$

  • ^
    -字符串的开头
  • -组的开始
    • 。+
      -匹配2个或更多字符
  • -组结束
  • \1+
    -重复先前匹配的组1次或多次
  • $
    -字符串结尾
在普通语言中,初始捕获组将匹配2个或更多字符,然后该捕获组将重复2次或更多次,完全匹配将跨越字符串的整个长度

因此,例如,复合编号4可以通过在第一个捕获组中匹配的
,以及通过再次反向引用(再次匹配)该组来匹配

复合编号9可以通过在第一个捕获组中匹配的
,,
,以及两次以上反向引用该组来匹配

无法匹配素数5,因为字符串中没有子段,因此重复子段N次(其中N为2或更多)将导致5


因此,如果字符串是复合的,则整个正则表达式将针对字符串执行。颠倒测试,你会检查重复逗号的数量是否为素数。

你从哪里得到的这段代码?@Sam这个问题可能会更好,但在我看来并不是那么不清楚,这是一个非常有趣的问题algorithm@CertainPerformance现在请随意回答
数组(n+1)
在本上下文中与
相同,“。重复(n)
。。。因此,测试在n个
字符上运行。。。有趣的。。。