浅入正则一

正则表达式一直作为我的痛点,没有系统的学习和了解,之前部门有本500多页的书叫《精通正则表达式》,一直没勇气拿起来。到后来业务中需要正则的地方越来越多,不忍心老找人帮忙写正则了。找了资料先看着,至少自己先入个门。

with (javascript)

实例化RegExp对象

实例化RegExp对象同实例化其他JavaScript内置对象一样,分别有字面量和构造函数两种方法:

var reg1 = /\d/g;                    //全局匹配数字
var reg2 = new RegExp("\\D","g");    //全局匹配非数字

RegExp对象原型方法

类似Array/String/Function都有自己的原型方法,RexExp对象同样有自己的原型方法。

test

不管正则6不6,test方法一定都会用:RegExpObject.test(string); string中是否含有RegExpObject中匹配的字符串片段,有则返回true,否则返回false

/\d/g.test("abc");        //false
/\d/g.test("123");        //true

exec

这个方法很强大,但是理解起来有点难,简单说,用法是:RegExpObject.exec(string);这个和test一样,返回值是返回一个数组或者null,也就是说RegExpObjectstring中成功匹配到了字符串片段,则返回一个数组,这个数组各项分别是:

[
    0: "与正则表达式匹配的文本",1: "与正则表达式第一个分组匹配的文本",//分组就先理解为一个括号为一个分组
    2:" 与正则表达式第二个分组匹配的文本",3: "···以此类推"
]
//来个例子: 
var reg1 = /([a-zA-Z]\d)+([\u4e00-\u9fa5])+/;
//匹配 (大小写字母连着一个数字) 至少一次 (再连着汉字) 至少一次
var str1 = "a11B2老cd3李e45好";
var result = reg1.exec(str1);
console.log(result);                     //["B2老","B2","老"]

例子中正则匹配数字的结果是"B2老";所以结果数组中第一个元素为"B2老",第一个分组是(大小写字母连着一个数字),第二个元素就是"B2",第二个分组是汉字,第三个元素就是"老"。同时,这里有几个重点要划:

  1. 返回结果的数组自带另外两个属性:index:匹配成功字符串片段的起始index; input:存放被检测的字符串,也就是例子中的str1;

  2. 如果整个正则没有匹配结果,仅仅其中某个分组有匹配结果,则exec的返回值为null。所以test方法也可以使用RegExpObject.exec(string) != null;来替代;

  3. 如果其中某个分组有多个匹配结果,例如:我们str1改"a1B2老cd3李e45好";那么 (大小写字母连着一个数字) 这个分组就有多个匹配结果,a1B2;那么返回到数组中的是最后一个匹配成功的结果,也就是B2;

  4. 如果正则是一个全局的正则表达式(global);那么返回值数组会首先取第一段匹配成功的结果输出,然后第二次执行会取第二段,依次循环类推,例如:

var reg2 = /([a-zA-Z]\d)+([\u4e00-\u9fa5])+/g;

//匹配 (大小写字母连着一个数字) 至少一次 (再连着汉字) 至少一次
var str2 = "a11B2老cd3李e45好";
var result1 = reg2.exec(str2);
var result2 = reg2.exec(str2);
var result3 = reg2.exec(str2);

console.log(result1,result2,result3);

//输出:
["B2老","老"]        //index: 3
["d3李","d3","李"]        //index: 7
null

toString

方法同ObjecttoString方法;将RegExp对象转为字符串。

var reg3 = /\d/g;
var reg4 = new RegExp("\\d","g");
reg3.toString();            //"/\d/g"
reg4.toString();            //"/\d/g"

RegExp对象属性

  1. global: 只读,简写g;被设置则表示全局搜索,即在字符串中查找到所有匹配条件的字符串片段,不设置的话匹配到第一个成功的即停止;

  2. ignoreCase: 只读,简写i;不区分大小写;

  3. multiline: 只读,简写m;多行匹配,字符串中带有换行符时,如果不设置i属性,则只匹配第一行,设置后所有行均匹配且每行的开头/结尾可以作为开头/结尾被匹配(^/$);

  4. source: 只读,返回正则表达式的文本,简单说,上例中的正则表达式/([a-zA-Z]\d)+([\u4e00-\u9fa5])+/gim,去掉两边的斜杠和斜杠外的东西//gim,结果就是([a-zA-Z]\d)+([\u4e00-\u9fa5])+

  5. lastIndex: 读写,在全局正则表达式的前提下,上一次匹配成功的文本片段的最后一个字符之后一个文本的位置,也是下一次匹配的起始位置,初始为0,无匹配结果时置为0。例:

var reg5 = /\d/g;
var str5 = "a1bc2e3fj";
console.log(reg5.lastIndex);                         //0
console.log(reg5.test(str5),reg5.lastIndex);        //true 2
console.log(reg5.test(str5),reg5.lastIndex);        //true 5
console.log(reg5.test(str5),reg5.lastIndex);        //true 7
console.log(reg5.test(str5),reg5.lastIndex);        //false 0
console.log(reg5.test(str5),reg5.lastIndex);        //true 5

在第5行中,结果为false,因为第四行中的匹配成功后,lastIndex为7,也就是下一次是从f开始匹配,所以匹配失败,返回false,并把lastIndex置为0

浅入正则(二):字符的含义和使用

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


jquery.validate使用攻略(表单校验) 目录 jquery.validate使用攻略1 第一章 jquery.validate使用攻略1 第二章 jQuery.validate.js API7 Custom selectors7 Utilities8 Validato
/\s+/g和/\s/g的区别 正则表达式/\s+/g和/\s/g,目的均是找出目标字符串中的所有空白字符,但两者到底有什么区别呢? 我们先来看下面一个例子: let name = 'ye wen jun';let ans = name.replace(/\s/g, '&#3
自整理几个jquery.Validate验证正则: 1. 只能输入数字和字母 /^[0-9a-zA-Z]*$/g jQuery.validator.addMethod("letters", function (value, element) { return this.optio
this.optional(element)的用法 this.optional(element)是jquery.validator.js表单验证框架中的一个函数,用于表单控件的值不为空时才触发验证。 简单来说,就是当表单控件值为空的时候不会进行表单校验,此函数会返回true,表示校验通过,当表单控件
jQuery.validate 表单动态验证 实际上jQuery.validate提供了动态校验的方法。而动态拼JSON串的方式是不支持动态校验的。牺牲jQuery.validate的性能优化可以实现(jQuery.validate的性能优化见图1.2 jQuery.validate源码 )。 也可
自定义验证之这能输入数字(包括小数 负数 ) <script type="text/javascript"> function onlyNumber(obj){ //得到第一个字符是否为负号 var t = obj.value.charAt(0); //先把非数字的都
// 引入了外部的验证规则 import { validateAccountNumber } from "@/utils/validate"; validator.js /*是否合法IP地址*/ export function validateIP(rule, value,cal
VUE开发--表单验证(六十三) 一、常用验证方式 vue 中表单字段验证的写法和方式有多种,常用的验证方式有3种: data 中验证 表单内容: <!-- 表单 --> <el-form ref="rulesForm" :rules="formRul
正则表达式 座机的: 例子: 座机有效写法: 0316-8418331 (010)-67433539 (010)67433539 010-67433539 (0316)-8418331 (0316)8418331 正则表达式写法 0\d{2,3}-\d{7,8}|\(?0\d{2,3}[)-]?\d
var reg = /^0\.[1-9]{0,2}$/;var linka = 0.1;console.log (reg.test (linka)); 0到1两位小数正则 ^(0\.(0[1-9]|[1-9]{1,2}|[1-9]0)$)|^1$ 不含0、0.0、0.00 // 验证是否是[1-10
input最大长度限制问题 <input type="text" maxlength="5" /> //可以 <input type="number" maxlength="5" /> //没有效
js输入验证是否为空、是否为null、是否都是空格 目录 1.截头去尾 trim 2.截头去尾 会去掉开始和结束的空格,类似于trim 3.会去掉所有的空格,包括开始,结束,中间 1.截头去尾 trim str=str.trim(); // 强烈推荐 最常用、最实用 or $.trim(str);
正则表达式语法大全 字符串.match(正则):返回符合的字符串,若不满足返回null 字符串.search(正则):返回搜索到的位置,若非一个字符,则返回第一个字母的下标,若不匹配则返回-1 字符串.replace(正则,新的字符串):找到符合正则的内容并替换 正则.test(字符串):在字符串中
正整数正则表达式正数的正则表达式(包括0,小数保留两位): ^((0{1}.\d{1,2})|([1-9]\d.{1}\d{1,2})|([1-9]+\d)|0)$正数的正则表达式(不包括0,小数保留两位): ^((0{1}.\d{1,2})|([1-9]\d.{1}\d{1,2})|([1-9]+
JS 正则验证 test() /*用途:检查输入手机号码是否正确输入:s:字符串返回:如果通过验证返回true,否则返回false /function checkMobile(s){var regu =/[1][3][0-9]{9}$/;var re = new RegExp(regu);if (r
请输入保留两位小数的销售价的正则: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/ 1.只能输入英文 <input type="text" onkeyup="value
判断价格的正则表达式 价格的正则表达式 /(^[1-9]\d*(\.\d{1,2})?$)|(^0(\.\d{1,2})?$)/; 1 解析:价格符合两种格式 ^ [1-9]\d*(.\d{1,2})?$ : 1-9 开头,后跟是 0-9,可以跟小数点,但小数点后要带上 1-2 位小数,类似 2,2
文章浏览阅读106次。这篇文章主要介绍了最实用的正则表达式整理,比如校验邮箱的正则,号码相关,数字相关等等,本文给大家列举的比较多,需要的朋友可以参考下。_/^(?:[1-9]d*)$/ 手机号
文章浏览阅读1.2k次。4、匹配中的==、an==、== an9、i9 == "9i"和99p==请注意下面这部分的作用,它在匹配中间内容的时候排除了说明:当html字符串如下时,可以匹配到两处,表示匹配的字符串不包含and且不包含空白字符。说明:在上面的正则表达式中,_gvim正则表达式匹配不包含某个字符串
文章浏览阅读897次。【代码】正则表达式匹配a标签的href。_auto.js 正则匹配herf