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+
-字符串结尾$
,
,以及通过再次反向引用(再次匹配)该组来匹配
复合编号9可以通过在第一个捕获组中匹配的,,
,以及两次以上反向引用该组来匹配
无法匹配素数5,因为字符串中没有子段,因此重复子段N次(其中N为2或更多)将导致5
因此,如果字符串是复合的,则整个正则表达式将针对字符串执行。颠倒测试,你会检查重复逗号的数量是否为素数。你从哪里得到的这段代码?@Sam这个问题可能会更好,但在我看来并不是那么不清楚,这是一个非常有趣的问题algorithm@CertainPerformance现在请随意回答
数组(n+1)
在本上下文中与相同,“。重复(n)
。。。因此,测试在n个,
字符上运行。。。有趣的。。。