零JS筆記 | 正則基礎
部分常用正則:
//QQ驗證:
var re = /^[1-9]\d{4,11}$/
//去空格:
var re = /^\s+|\s+$/g;
//匹配中文:
[\u4e00-\u9fa5]
//行首行尾空格
^\s*|\s*$
//Email:
^\w+@[a-z0-9]+(\.[a-z]+){1,3}$
//网址:
[a-zA-z]+://[^\s]*
//QQ号:
[1-9][0-9]{4,9}
//邮政编码:
[1-9]\d{5}
//身份证:
[1-9]\d{14}|[1-9]\d{17}|[1-9]\d{16}x
ver re = {
qq:[1-9][0-9]{4,9},
email:^\w+@[a-z0-9]+(\.[a-z]+){1,3}$,
number:/\d+/,
url:[a-zA-z]+://[^\s]*,
nospace:^\s*|\s*$,
postalcode:[1-9]\d{5},
icard:[1-9]\d{14}|[1-9]\d{17}|[1-9]\d{16}x
}
re.email
例如分析:
abcd12@163qq.com
^w+@[a-z0-9]+(.[a-z]+){1,3}$
^w+ :可出現多位字符
@:匹配@
[a-z0-9]+ :可出現多次字符
(.[a-z]+) :分組,.匹配真正的. [a-z]:出現net com 一個整體;
{1,3}$: 再+量詞表示如.com.cn .cn.net等等
普通查看字符串裏的數字
str = 'weirup123skjdlj890lkjd12kldk899'
console.log(findNum(str));
function findNum(str) {
var arr = [
]
var tmp = ''
for (var i = 0; i < str.length; i++) {
if (str.charAt(i) <= '9' && str.charAt(i) >= '0') {
// arr.push(str.charAt(i))
tmp += str.charAt(i)
}
else {
if (tmp) {
arr.push(tmp);
tmp = '';
}
}
}
if (tmp) {
arr.push(tmp)
tmp = '';
}
return arr;
}
var re = /\d+/g; //找出數字;
var re = /\D+/g; //找出字母;
console.log(str.match(re));
<style>
.reg-tb{
width:100%;border-collapse: collapse
}
.reg-tb td{border:1px solid #ccc;padding:5px;}
.reg-tb tr>td:first-child{min-width: 100px;
text-align: center;}
</style>
test | 匹配返回真假 | 寫法:re.test(str) |
search | 成功返回位置,匹配失败,就返回-1,像indexOf | 寫法:str.search(re) |
replace | 返回替换后的字符串 | 寫法:str.replace(re,newstr),replace : 第二个参数;可以是字符串,也可以是一个回调函数 |
match | 返回匹配数组 | 寫法:str.search(re) |
轉義字符:
n | 換行 |
r | 製表 |
t | 回車 |
s | 空格 |
S | 非空格 |
d | 數字 |
D | 非數字 |
w | 字符 (字母、數字、下劃線_) |
W | 非字符 (特殊字符、漢字等) |
b | 独立的部分(起始、结束、空格) |
B | 非独立的部分 |
小記錄
i | i——ignore 正则中的默认:是区分大小写; 如果不区分大小写的话,在正则的最后加标识 i (不区分大小写) |
g | 全局匹配:g——global;正则默认:正则匹配成功就会结束,不会继续匹配 如果想全部查找,就要加标识 g(全局匹配) |
+ | 量詞;匹配不确定的位置 + : 至少出现一次,如d+,即至少匹配多次數字,如果連接數字則為一個整體 |
{} | 量詞;不確定次數:{4,7}:最少出現4次,最多出現7次;{4,}最少出現4次;{4}:剛好出現4次;var re = /ddd/; === /d{3}/; + = {1,} |
? | ? 重複零次或1次;var re = /a?/,表示a只能重複0次或1次 ? = {0,1} |
* | 前边的内容可以重复任意次以使整个表达式得到匹配。因此,.连在一起就意味着任意数量的不包含换行的字符 * = {0,},即可以不出現,但+是一定要出現一次 |
| | “或”的意思,正則內使用,var re = /a|b/; |
() | 匹配子項,把正则的整体叫parent,左边第一个小括号里面的正则,叫做这个第一个子项...var re = /(a)(b)(c)/; |
[] | 用中括号表示,中括号的整体代表一个字符; var str = 'abc',var re = /a[dec]c/;,第1位匹配a,第2位匹配[dec]中的一位,第3位匹配c,則返回true |
^ | 1、排除 : ^ 如果^写在[]里面的话,就代表排除的意思,如var re = /a1c/;,第2位只要不是bde返回true 2、匹配字符串開頭;如var re= /^d/,開頭必須為數字; |
$ | $匹配结尾; ^和$的意义就变成了匹配行的开始处和结束处。比如填寫QQ號碼必須為5位-12位, var re = /^d{5,12}$/ {5,12}$表示結束的位置必須是數字 |
- | 如果-写在[]里面的话,就代表范围,范围一定是从小到大的,var re = /a[b-k]c/; [a-z] [0-9] [A-Z]、[a-z0-9A-Z];
</td>
</tr> <tr>
</tr> </table> test();
search :字符串.search(正则)
match :返回数组 /d+/g; //这里说明前面的反斜杠d至少出现一次,多则不限
replace: 替換所有匹配:
函数的第一个参数:就是匹配成功的字符,每次匹配到的字符不同,不同長度返回不同*號
匹配子项
match方法中的匹配子项
正則表達式字符類 [abc]
字符类实例,过滤标签
当正则需要传参时,一定要用全称的写法,如var re = new RegExp('\b'+sClass+'\b'),這裏也一定要雙\,字符串當中特殊的字符想輸入,必須再加,如輸出單引號'
前項聲明,反前項聲明
所以,過濾html標籤,但保留li標籤: re = /<2+>/g; |