Seasons123 / blog-FE

web前端相关issue is my blog :lollipop:
2 stars 0 forks source link

正则表达式 #8

Open Seasons123 opened 7 years ago

Seasons123 commented 7 years ago

1. 详细讲解 JavaScript RegExp 对象 :+1:

http://www.w3school.com.cn/jsref/jsref_obj_regexp.asp

1. 正则表达式 - 元字符

http://www.runoob.com/regexp/regexp-metachar.html

2. 正则表达式基本语法

http://www.cnblogs.com/ldq2016/p/5528177.html :100: js正则表达式语法这里面的斜杠大都应该换成反斜杠,有点误导

3. 正则调试器:

www.debuggex.com

Seasons123 commented 7 years ago

在js中正则表达式如何判断用户输入的内容只能是数字和字母? 假设你的html为: 你可以用test的方法去判断:

var reg = /^[0-9a-zA-Z]+$/
var str = document.getElementById("mInput").value;
if(!reg.test(str)){
alert("你输入的字符不是数字或者字母")
}

PS:你可以用onchange或者onkeyup来触发

Seasons123 commented 7 years ago

零宽断言

(1)(?= exp) (零宽度正预测先行断言。) 匹配exp前面的位置。 例如,\w+(?=\d) 与后跟数字的单词匹配,而不与该数字匹配。此构造不会回溯。 (2)(?<=exp)     匹配exp后面的位置 (3)(?!exp) ( 零宽度负预测先行断言。 ) 匹配后面跟的不是exp的位置。 例如:/ab(?![A-Z])/,含义是 匹配后面不跟随任意一个大写字母的字符串"ab" 例如:\d{3}(?!\d)匹配三位数字,而且这三位数字的后面不能是数字 (4)(?<!exp)     匹配前面不是exp的位置 (3)两个特殊的符号'^'和'$'。他们的作用是分别指出一个字符串的开始和结束。

【例子】格式化银行卡号的方法:

var str = "1234567890123456789099";
str.replace(/[0-9](?=([0-9]{4})+)/g,'*').replace(/(?!^)(?=([0-9*]{4})+$)/g, ' ');
//输出:
** **** **** **** **** 9099

我的理解: (1)第一个正则:后面有4位数字(位数是4的整数倍)的数字

[0-9]:  匹配任何从 0 至 9 的数字。
(?= 子表达式) : 见上面的解释
[0-9]{4} :    匹配包含 4个数字的字符串
[0-9]{4})+   :4个数字的字符串,至少一个

(2)第二个正则:

[0-9*]:    匹配任何 0 至 9 的数字和 *
([0-9*]{4})   :    匹配包含 4个数字或*的字符串(4位可以全是数字,全是*,或者数字和*的组合),
[0-9*]{4})+    :    满足上面的字符串,至少一个
[0-9*]{4})+$   :   已上面的字符串结尾的字符串
(?=([0-9*]{4})+$):匹配 至少包含一个有四个数字或*结尾的字符串 的位置
(?!^)   :         除去第一个位置,^表示一个字符串的开始

解释: 两个正则,精髓在于零宽断言。第一个正则意思是把所有后面有4位数字(位数是4的整数倍)的数字都替换成* 最后四个数字因为后面不足4位数字了 所以没被替换。第二个正则 需要理解一点就是 零宽断言匹配的是一个字符之间的位置 所以第二个正则就匹配了每4个数字之间的位置(除去第一个位置)

正则表达式零宽断言详解http://www.jb51.net/article/95906.htm 正则表达之零宽断言(零宽度正预测先行断言)http://www.cnblogs.com/a757956132/p/5019718.html 零宽断言与懒惰匹配以及平衡组 http://www.cnblogs.com/kissdodog/archive/2013/04/25/3043122.html

Seasons123 commented 6 years ago

用js写一个正则匹配标签中是否包含一个class(百度面试题) default