1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
|
<!DOCTYPE HTML>
<
html
>
<
head
>
<
meta
charset
=
"UTF-8"
>
<
title
>JS正则表达式学习</
title
>
<
script
type
=
"text/javascript"
>
(function(){
/*
RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具。
1:直接量语法 /pattern/attributes
2:创建 RegExp 对象的语法:new RegExp(pattern, attributes);
3:参数
(1)参数 pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。
(2)参数 attributes 是一个可选的字符串,包含属性 "g"、"i" 和 "m",
分别用于指定全局匹配、区分大小写的匹配和多行匹配。
ECMAScript 标准化之前,不支持 m 属性。
如果 pattern 是正则表达式,而不是字符串,则必须省略该参数。
4:返回值
一个新的 RegExp 对象,具有指定的模式和标志。
如果参数 pattern 是正则表达式而不是字符串,
那么 RegExp() 构造函数将用与指定的 RegExp 相同的模式和标志创建一个新的 RegExp 对象。
如果不用 new 运算符,而将 RegExp() 作为函数调用,
那么它的行为与用 new 运算符调用时一样,
只是当 pattern 是正则表达式时,它只返回 pattern,而不再创建一个新的 RegExp 对象。
5:抛出
(1)SyntaxError - 如果 pattern 不是合法的正则表达式,
或 attributes 含有 "g"、"i" 和 "m" 之外的字符,抛出该异常。
(2)TypeError - 如果 pattern 是 RegExp 对象,
但没有省略 attributes 参数,抛出该异常。
6.说明:
由于我们用new RegExp()对象时,有些字符串需要转义,所以一般我们用“直接量语法”
eg:
var reg = /\d+/;
var reg = new RegExp("\\d+"); //需要转义比较麻烦
*/
/*
1.test()方法:test() 方法用于检测一个字符串是否匹配某个模式.
语法:RegExpObject.test(string)
如果字符串 string 中含有与 RegExpObject 匹配的文本,则返回 true,否则返回 false。
eg:
var reg = /\d+/; //表示必须含有数字
var value1 = "123";
var value2 = "abc";
var v3 = "a2c";
alert(reg.test(value1)); //true
alert(reg.test(value2)); //false
alert(reg.test(v3)); //true
*/
/*
2.^n : ^n 量词匹配任何开头为 n 的字符串。
eg:
var reg = /^\d+/; //表示任何开头必须为数字
var v1 = "123abc";
var v2 = "abc123";
alert(reg.test(v1)); //true
alert(reg.test(v2)); //false
*/
/*
3.n$: n$ 量词匹配任何结尾为 n 的字符串。
eg:
var reg = /\d+$/; //表示结尾必须为数字
var v1 = "abc123";
var v2 = "123abc";
alert(reg.test(v1)); //true
alert(reg.test(v2)); //false
*/
/*
4.综合2,3
var reg = /^\d+$/; //表示必须都是数字
var v1 = "abc123";
var v2 = "123abc";
var v3 = "123";
alert(reg.test(v1)); //false
alert(reg.test(v2)); //false
alert(reg.test(v3)); //true
//综上所述:JS中的正则,一般我们以这种格式:var reg = /^xxxxxx$/;
//^代表开始,$代表结束
*/
/*
5.String对象的match()方法:
(1)match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。
该方法类似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置。
(2)语法 :
stringObject.match(searchvalue)
stringObject.match(regexp)
(3)参数 描述
searchvalue 必需。规定要检索的字符串值。
regexp 必需。规定要匹配的模式的 RegExp 对象。
如果该参数不是 RegExp 对象,
则需要首先把它传递给 RegExp 构造函数,
将其转换为 RegExp 对象。
(4)返回值
存放匹配结果的数组。该数组的内容依赖于 regexp 是否具有全局标志 g。
(5)说明:
如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配。
如果没有找到任何匹配的文本, match() 将返回 null
eg:
var str = "1 plus 2 equals 3";
var str1 = "a plus b equals ab";
var result = str.match(/\d+/g); //使用全局匹配的正则表达式来检索字符串中的所有数字
var result1 = str.match(/\d+/); //检测到第一个数字就停止检测了,并返回第一个数字
var result2 = str1.match(/\d+/); // str1中没有数字,将返回null
alert(result); //1,2,3 数组
alert(result1); // 1
alert(result2); // null
var str3 = "Hello , World, World is not mine";
var r1 = str3.match("world"); //字符串中没有world返回null
var r2 = str3.match("World"); //非全局匹配
var r3 = str3.match(/World/g); //全局匹配
var r4 = str3.match(/World/);
var r5 = str3.match(/world/gi); //全局匹配,并且不区分大小写
alert(r1); //null
alert(r2); //World
alert(r3); //World,World 数组
alert(r4); //World ,只匹配到第一个
alert(r5); //World,World 数组 ,忽略大小写
var str4 = "@Jerry @Tom @Alex Hello" ;
var re1 = str4.match(/@\w+\s/gim); //匹配以@开头,以空格结尾,中间为字符的
alert(re1); //@Jerry ,@Tom ,@Alex 数组
*/
/*
6.方括号
(1):[abc] 查找方括号之间的任何字符。
eg:
var str = "I love a ,but I like b, c is my wife";
var r1 = str.match(/[abc]/g); //在字符串中对字符范围 abc 进行全局搜索
alert(r1); // a,b,b,c 数组
var r2 = str.match(/[a-h]/g); //在字符串中对字符范围 [a-h] 进行全局搜索
alert(r2); // e,a,b,e,b,c,f,e
*/
/*
(2):[^abc] 查找任何不在方括号之间的字符。
eg:
var str = "Is this all there is?";
var r1 = str.match(/[^a-h]/g); //对不在字符范围 [a-h] 内的字符进行全局搜索
alert(r1); //I,s, ,t,i,s, ,l,l, ,t,r, ,i,s,?
*/
/*
(3):
[0-9] 查找任何从 0 至 9 的数字。
[a-z] 查找任何从小写 a 到小写 z 的字符。
[A-Z] 查找任何从大写 A 到大写 Z 的字符。
[A-z] 查找任何从大写 A 到小写 z 的字符。
[adgk] 查找给定集合内的任何字符。
[^adgk] 查找给定集合外的任何字符。
(red|blue|green) 查找任何指定的选项。
var str = "Hello,Tom";
var str1 = "Hello,Jerry";
var str2 = "Hello,Jakc";
var reg = /^Hello,(Tom|Alex|Jerry)$/; //含有Tom 或者 Alex, 或者 Jerry 结尾
alert(reg.test(str)); //true
alert(reg.test(str1)); //true
alert(reg.test(str2)); //false
*/
/*
7.:元字符
(1):. 查找单个字符,除了换行和行结束符。
eg:
var str = "That's hot!";
alert(str.match(/h.t/g)); // hat,hot 数组
*/
/*
(2):\w 元字符用于查找单词字符。表示必须是字母字符
单词字符包括:a-z、A-Z、0-9,以及下划线。
eg:
var str = "Hello World ,1999 !!";
alert(str.match(/\w/g)); //H,e,l,l,o,W,o,r,l,d,1,9,9,9 数组
*/
/*
(3):\W 元字符用于查找非单词字符。
单词字符包括:a-z、A-Z、0-9,以及下划线。
var str = "Hello World ,1999 !!";
alert(str.match(/\W/g)); // , ,,, ,!,! 数组
*/
/*
(4):\d 查找数字。
var str = "Hello World ,1999 !!";
alert(str.match(/\d/g)); // 1,9,9,9 数组
*/
/*
(5):\D 查找非数字字符。
var str = "Hello World ,1999 !!";
alert(str.match(/\D/g)); //H,e,l,l,o, ,W,o,r,l,d, ,,, ,!,! 数组
*/
/*
(6):\s 查找空白字符。
var str = "Hello World ,1999 !!";
alert(str.match(/\s/g)); // , , 数组
*/
/*
(7):\S 查找非空白字符。
var str = "Hello World ,1999 !!";
alert(str.match(/\S/g)); //H,e,l,l,o,W,o,r,l,d,,,1,9,9,9,!,! 数组
*/
/*
(8):\b 元字符匹配单词边界。
在单词边界匹配的位置,单词字符后面或前面不与另一个单词字符直接相邻。
请注意,匹配的单词边界并不包含在匹配中。
换句话说,匹配的单词边界的长度为零。(不要与 [\b] 混淆。)
如果未找到匹配,则返回 null。
提示:\b 元字符通常用于查找位于单词的开头或结尾的匹配。
例子:
/\bm/ 匹配 "moon" 中的 'm';
/oo\b/ 不匹配 "moon" 中的 'oo',因为 'oo' 后面的 'n' 是一个单词字符;
/oon\b/ 匹配 "moon" 中的 'oon',因为 'oon' 位于字符串的末端,后面没有单词字符;
/\w\b\w/ 不匹配任何字符,因为单词字符之后绝不会同时紧跟着非单词字符和单词字符。
var str = "Hello World ,1999 !!";
var str1 = "HelloWorld ,1999 !!";
alert(str.match(/\bWo/g)); //Wo
alert(str1.match(/\bWo/g)); //null
*/
/*
8. 量词
n+ 匹配任何包含至少一个 n 的字符串。
n* 匹配任何包含零个或多个 n 的字符串。
n? 匹配任何包含零个或一个 n 的字符串。
n{X} 匹配包含 X 个 n 的序列的字符串。
n{X,Y} 匹配包含 X 或 Y 个 n 的序列的字符串。
n{X,} 匹配包含至少 X 个 n 的序列的字符串。
n$ 匹配任何结尾为 n 的字符串。
^n 匹配任何开头为 n 的字符串。
?=n 匹配任何其后紧接指定字符串 n 的字符串。
?!n 匹配任何其后没有紧接指定字符串 n 的字符串。
*/
/*
(1):n+ 匹配任何包含至少一个 n 的字符串。
n* 匹配任何包含零个或多个 n 的字符串。
n? 匹配任何包含零个或一个 n 的字符串。
var str = "Hello Weiyuan2013! I love you ";
var reg = /\d+/g; //至少包含一个数字
var reg1 = /l+/g; //结尾至少包含字母l
var reg2 = /lo?/g; //表示l含有0个或1个o
alert(reg.test(str)); //true
alert(reg1.test(str)); //true
alert(reg2.test(str)); //true
*/
/*
(4):
①n{X} 匹配包含 X 个 n 的序列的字符串。
用法:n{X,} 量词匹配包含 X 个 n 的序列的字符串。
②n{X,Y} 匹配包含 X 或 Y 个 n 的序列的字符串。
用法:
n{X,Y} 量词匹配包含 X 或 Y 个 n 的序列的字符串。
X 和 Y 必须是数字。并且X < Y
③n{X,} 匹配包含至少 X 个 n 的序列的字符串。
n{X,} 量词匹配包含至少 X 个 n 的序列的字符串。
X 必须是数字。
var str = "13523877794";
var reg = /7{3}/g; //匹配含有3个7
var reg1 = /7{4}/g; //匹配含有4个7
var reg2 = /7{3,4}/g; // 匹配含有3个7 或者4 个7
var reg3 = /7{2,}/g; //至少含有2个7 ,可以含有3个7或者4个。。。。。
alert(reg.test(str)); //true
alert(reg1.test(str)); //false
alert(reg2.test(str)); // true
alert(reg3.test(str)); //true
*/
/*
(5)
①?=n 匹配任何其后紧接指定字符串 n 的字符串。
说明:?=n 量词匹配任何其后紧接指定字符串 n 的字符串
②?!n 匹配任何其后没有紧接指定字符串 n 的字符串。
var str="Is this all there is";
alert(str.match(/is(?= all)/g)); //对其后紧跟 "all" 的 "is" 进行全局搜索:
alert(str.match(/is(?! all)/gi)); //对其后没有紧跟 "all" 的 "is" 进行全局搜索:
*/
//先这样多吧 ---下面看些具体的例子
/*
1.注册用户名验证:要求:字母数字的组合
var paramReg = /^[0-9a-zA-Z]*([a-zA-Z]+[0-9]+|[0-9]+[a-zA-Z]+)[0-9a-zA-Z]*$/;
var username = "12hanchao2013";
alert(paramReg.test(username));
*/
/*
2.对Email的验证:
var emailReg = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
var email = "windhan_20_06@163.com";
alert(emailReg.test(email));
*/
/*
3.对电话号码的验证
//var regPhone = /^(([0\+]\d{2,3}-)?(0\d{2,3})-)?(\d{7,8})(-(\d{3,}))?$/;
var regPhone = /^(([0+]\d{2,3}-)?(0\d{2,3})-)?(\d{7,8})(-(\d{3,}))?$/;
var phone = "4008-007-007";//"0427-7531992"; //"021-60825088";//"76423865";
var result = regPhone.test(phone);
alert(result);
*/
/*
4.验证手机号码:
var regMobile = /^1[3|4|5|6|7|8|9][0-9]{1}[0-9]{8}$/;
var mobile = "13877794164";
var result = regMobile.test(mobile);
alert(result);
*/
/*
5.验证扣扣号:
var regQQ =/^[1-9]\d{4,8}$/;
var qq = "294851313";
var result = regQQ.test(qq);
alert(result);
*/
/*
6.验证MSN:
var regMsn = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
var msn = "12345@liehuo.net";
var result = regMsn.test(msn);
alert(result);
*/
/*
7.验证网址:
//var regNet = /^http:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?$/;
var regNet = /^http:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?$/;
var url = "http://game.baidu.com";
var result = regNet.test(url);
alert(result);
*/
/*
8.验证IP:
var checkIp = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;
var ip = "192.168.25.103";
var result = checkIp.test(ip);
alert(result);
*/
})();
</
script
>
</
head
>
<
body
>
</
body
>
</
html
>
|
//replace方法的使用
// var reg = /\s\*/g;
// var str = "This *is *a *test *string";
// var resultString = str.replace(reg,"--");//用‘--’ 代替str字符串中的‘ *’
// document.writeln(resultString); //This--is--a--test--string
学习参考博客:http://blog.jobbole.com/63398/
本文转自韩立伟 51CTO博客,原文链接:http://blog.51cto.com/hanchaohan/1251007,如需转载请自行联系原作者