原文:js 正则之检测素数

相信很多人应该看过这篇文章,我第一次看到的时候是11年的样子,那时候学vbs的时候看过这个问题。
原文《检查素数的正则表达式》,在文章里已经解释了他是怎么判断的,我就不啰嗦了。
我们来说说 js 如何实现它吧。

先来看看什么是素数,在《质数 - 百度百科》里有详细的说明,而且也说了一些求素数的方法,什么6N+1法等。。
这些什么算法都不是我们要谈的,我们只说正则。

在那篇文章里给出的正则是 /^1?$|^(11+?)\1+$/
其实我觉得完全没必要检测 0 1 之类的,因为根据百度百科里的解释,素数是从 2 开始的。
所以只要加一个判断条件 n < 2 的都不是素数,其他的则用 /^(11+?)\1+$/ 进行验证即可,
不仅提升了效率,而且防止传入负数而报错。

我们先来写个遍历 n 以内素数的函数吧。

/*** 遍历素数* @param  {Number} max 遍历 2-max 之间的素数* @return {Array}      返回 2-max 之间所有素数*/
function prime(max) {var re = new RegExp('^(11+?)\\1+$'), // 检测质数正则str = '1', // 根据当前 i 生成对应个数 1 i = 1, // 计数器ret = []; // 质数结果集while (max > i++)re.test(str += '1') || ret.push(i);return ret;
}
var arr = prime(100);
console.log(arr);

在代码里发现  var re = new RegExp('^(11+?)\\1+$')  为什么不直接写  var re = /^(11+?)\1+$/  呢?
回去翻下我写的几篇正则文章就会找到答案了。
最传统的写法往往是嵌套循环来遍历素数,但是有了正则的帮助,代码简洁优雅。

如果要判断素数的话,那就更简洁了。

/*** 判断是否是素数* @param  {Number} n  要判断是数字* @return {Boolean}   返回 true|false*/
function isPrime(n) {return n < 2 ? false : !/^(11+?)\1+$/.test(Array(n + 1).join('1'));
}console.log(-2, isPrime(-2));
console.log(1, isPrime(1));
console.log(2, isPrime(2));
console.log(11, isPrime(11));

好了,今天的分享就这么点东西,虽然没什么实际用途,但是可以开阔大家的眼界。
正则不仅仅就是匹配字符串,还能判断素数,二元/三元方程有无解等等等等看似不可思议的逻辑。

js 正则之检测素数相关推荐

  1. js 正则 数据类型检测四种方式

    数据类型检测 1.typeof 1.返回字符串,字符串包含了对应数据类型2.不能检测null3.不能检测对象数据类型 2.instanceof 检测实例是否属于某个类的方法 1.只要当前类的原型在当前 ...

  2. js正则检测输入内容为数字,包括负数,整数,浮点数,亲测可用.JS检测整数,js检测浮点数,js检测负数,js检测数字,js限制输入框只输入数字,解决H5 number类型只能输入正数问题.

    JS 正则实现数字检测和限制输入,包括整数.浮点数.负数(亲测可用) 网上搜了一下,居然可以直接拿来用的很少,要么就是只能检测正整数.要么是只能检测浮点数,总之很多都不适合,而H5提供的type=&q ...

  3. js基础--数据类型检测的相关知识

    欢迎访问我的个人博客:www.xiaolongwu.cn 前言 最近工作有点忙,好几天都没更新技术博客了. 周末起床打开有道云笔记,发现自己的博客todolist里躺了一堆只有名字的文件. 话不多说, ...

  4. 经典案例重点案例:点名表,JS正则验证全选、全不选、反选,点击可以实现三个功能,轮播图 字符串截取以及替换,图片切换

     重点案例: 点击开始点名,框内的名字转动 点击结束点名,框内的转动停止,并出现一个随机的学生姓名 <!DOCTYPE html> <html>     <head> ...

  5. js 正则是否包含某些字符串_js 正则包含字符

    展开全部 js 正则表达式检测是否包含特殊字符32313133353236313431303231363533e4b893e5b19e31333337396239,代码如下: var title='j ...

  6. js正则验证特殊字符

    js正则验证特殊字符 方案一 var regEn = /[`~!@#$%^&*()_+<>?:"{},.\/;'[\]]/im,regCn = /[·!#¥(--)::& ...

  7. js正则验证手机号码有效性

    通过js正则验证手机号码的有效性,方法如下: 验证130-139,150-159,180-189号码段的手机号码 <script type="text/javascript" ...

  8. js进阶正则表达式方括号(方括号作用)(js正则是在双正斜杠之中:/[a-z]/g)...

    js进阶正则表达式方括号(方括号作用)(js正则是在双正斜杠之中:/[a-z]/g) 一.总结 方括号:范围 圆括号:选 大括号:数量 1.js正则是在双正斜杠之中: var reg2=/[a-z]/ ...

  9. js 正则学习小记之匹配字符串

    原文:js 正则学习小记之匹配字符串 今天看了第5章几个例子,有点收获,记录下来当作回顾也当作分享. 关于匹配字符串问题,有很多种类型,今天讨论 js 代码里的字符串匹配.(因为我想学完之后写个语法高 ...

最新文章

  1. 动作分析 姿态估计_关于大片人物特效少不了的人体姿态估计,这里有一份综述文章...
  2. Spring Cloud系列:不重启eureka,清除down掉的服务
  3. java中split特殊符号
  4. ubuntu20配置阿里源简单粗暴的方法
  5. c语言中常用的预处理命令6,C语言的预处理命令
  6. Generative Adversarial Nets[BEGAN]
  7. C#中json序列化与反序列化
  8. [恢]hdu 1846
  9. nginx文件下载服务器简单配置
  10. join为什么每个字符都分割了 js_2019JS必看面试题
  11. matlab lu分解求线性方程组_线性代数10——矩阵的LU分解
  12. 什么算法计算地图上从A点到B点的方向?
  13. C语言程序设计第五版谭浩强课后答案 第六章习题答案
  14. IDEA git 切换分支产生问题
  15. angular pipe
  16. LeetCode207: 课程表(字节手撕算法拓扑排序)
  17. 将vue-admin-template组件默认英文语言改成中文
  18. 数据挖掘(二)预测潜在贷款发放客户
  19. C#中在鼠标经过Button控件时显示提示信息(弹出气泡提示框)
  20. 【高效程序员系列】2、别做机器人------让工作自动化

热门文章

  1. AI芯片:从历史看未来
  2. 新技术:如何用VR训练机器人?
  3. 涌进体制的技术人:Nature 发文硕士回乡当公务员
  4. 国内首家!携程每周两天可在家“躺平”,76% 的员工主动报名
  5. 青岛程序员加班看不上球赛崩溃,外卖小哥伸出援手:我帮你改代码
  6. 秒啊!程序员防猝死指南来了!
  7. 注意!今日起 GitHub 新建存储库的默认分支就不叫“master”了!
  8. 是财富自由的声音,蚂蚁上市前,取消了周报
  9. 微服务架构介绍和RPC框架对比
  10. mongodb:linux基本操作