正则

//[注意]
11 //[1]汉字不属于\w
12 //[2]正则表达式不支持变量,只能用new RegExp来写
13 //[3]使用的所有元字符必须转义,用new RegExp写的正则必须双重转义
14 //[4]正则表达式中不能出现多余空格
15 //[5]正则表达式中的子项必须是用小括号括起来的,并且顺序以小括号的前括号出现的顺序为准
16 //[6]alert里面的换行不能<br>或这\<br\>,而应该用\n。alert里面相当于是系统解析的,而不是浏览器
17
18 /**********************************************************/
19 //[定义]
20 //[1]正则又叫规则或模式,是一个强大的字符串匹配工具,在js中是一个对象
21 //[2]正则的两种写法js写法和perl写法
22 //[2.1]js写法
23 /*var re1 = new RegExp('a');*/
24 //[2.2]perl写法
25 /*var re2 = /a/;*/
26 //[3]两个特性
27 //[3.1]贪婪性,匹配最长的
28 //[3.2]懒惰性,不设置/g,则只匹配第1个
29 //[4]正则表达式中的元字符包括(14个):() [] {} \ ^ $ | ? * + .
30
31 /**********************************************************/
32 //[语法]
33 //[1]关于$符号的用法
34 //$$ $
35 //$& 匹配整个模式的子字符串(与RegExp.lastMatch的值相同)
36 //$` 匹配子字符串之前的子字符串(与RegExp.leftContext的值相同)
37 //$' 匹配子字符串之后的子字符串(与RegExp.rightContext的值相同)
38 //$n 匹配第n个捕获组的子字符串,其中n等于0-9。$1表示匹配第一个捕获组的子字符串
39 //$nn 匹配第nn个捕获组的子字符串,其中nn等于01-99
40 /*console.log('cat,bat,sat,fat'.replace(/(.a)(t)/g,'$1'))//ca,ba,sa,fa
41 console.log('cat,bat,sat,fat'.replace(/(.a)(t)/g,'$2'))//t,t,t,t
42 console.log('cat,bat,sat,fat'.replace(/(.a)(t)/g,'$$'))//$,$,$,$
43 console.log('cat,bat,sat,fat'.replace(/(.a)(t)/g,'$&'))//cat,bat,sat,fat
44 console.log('cat,bat,sat,fat'.replace(/(.a)(t)/g,'$`'))//,cat,,cat,bat,,cat,bat,sat,
45 console.log('cat,bat,sat,fat'.replace(/(.a)(t)/g,"$'"))//,bat,sat,fat,,sat,fat,,fat,
46 console.log('cat,bat,sat,fat'.replace(/(.a)(t)/g,'$0'))//$0,$0,$0,$0
47 console.log('cat,bat,sat,fat'.replace(/(.a)(t)/g,'$3'))//$3,$3,$3,$3*/
48 //[系统转义字符、正则转义字符、浏览器转义字符]
49 //[1]alert()和console.log()里面的字符是系统转义字符
50 //\r return 回车 || \n newline 换行 || \t table 制表符 || \b backspace 退格
51 /*alert('http://www.baidu.com\n\t你好')*/
52 //[2]修饰符
53 //[2.1]/g global 全局
54 //[2.2]/i ignoreCase 不区分大小写
55 //[2.3]/m multiline 多行
56 //[3]转义字符
57 //[3.0].号代表除了换行符\n之外的任意字符
58 //[3.1]\d 数字 \D 非数字
59 //[3.2]\w 字母、数字、下划线 \W 非字母、数字、下划线
60 //[3.3]\s 空格 \S 非空格
61 //[3.4]\b 边界符,\w的左侧或右侧不是\w,则会出现一个边界符 \B非边界符
62 //[3.5]\1 表示和前面相同的一个字符
63 //[3.6](\w)(\d)\1\2 :\1代表\w当时所代表的值,\2代表\d当时所代表的值
64 //[3.7]\t 制表符
65 //[3.8]\v 垂直制表符
66 //[3.9]\uxxxx 查找以十六进制xxxx规定的Unicode字符
67 //[4]量词
68 //[4.1]{n}:匹配n次
69 //[4.2]{n,m}:匹配至少n次,最多m次
70 //[4.3]{n,}:匹配至少n次
71 //[4.4]?:相当于{0,1}
72 //[4.5]*:相当于{0,}
73 //[4.6]+:相当于{1,}
74 //[5]位置符号
75 //[5.1]^起始符号
76 //[5.2]$结束符号
77 //[5.3]?=肯定正向环视
78 //[5.4]?!否定正向环视

87 /**************************************************************************/
88 //[字符串和正则的方法]
89 //[1]字符串1.match(字符串2|正则),把匹配的内容保存到一个数组中返回
90 //[1.1]不加/g
91 /*var string = 'cat,bat,sat,fa';
92 var pattern = '/.at/';
93 var matches = string.match(pattern);
94 console.log(matches);*/
95 //matches[0]:cat
96 //matches.index:0
97 //matches.input:cat,bat,sat,fa
98 //[1.2]加/g
99 /*var string = 'cat,bat,sat,fa';
100 var pattern = /.at/g;
101 var matches = string.match(pattern);
102 console.log(matches);//matches:['cat','bat','sat']*/
103 //[2]字符串1.search(字符串2|正则),返回匹配的内容有字符串1中首次出现的位置,类似于indexOf,找不到返回-1
104 //[2.1]不加/g
105 /*var string = 'j1h342jg24g234j 3g24j1';
106 var pattern = /\d/;
107 var pos = string.search(pattern);
108 console.log(pos);//1*/
109 //[2.2]加/g效果同不加/g
110 /*var string = 'j1h342jg24g234j 3g24j1';
111 var pattern = /\d/g;
112 var pos = string.search(pattern);
113 console.log(pos);//1*/
114 //[2.3]找出匹配的所有位置
115 //思路
116 //[1]从temp找到第一个匹配数字的位置,赋给index
117 //[2]all = index + 上一次的all + 1
118 //[2]将all push到array中,并将temp重置为以该数字下一位为起始位的字符串
119 //[3]从temp找到第二个匹配数字的位置(新数组中第一个)
120 //[4]all = index + 上一次的all + 1找到的位置,并将temp重置为以该数字下一位为起始位的字符串
121 //[5]从temp找不到匹配数字时,结束
122 /*var string = 'j1h342jg24g234j 3g24j1';
123 var pattern = /\d/g;
124 var temp = string;
125 var array = [];
126 var index;
127 var all = -1;
128 while(temp.search(pattern) != -1){
129 index = temp.search(pattern);
130 all = index + all + 1;
131 array.push(all);
132 temp = string.substring(all+1);
133 }
134 console.log(array);*/
135 //[2.4]用exec()方法找出匹配的所有位置和所有值
136 /*var string = 'j1h342jg24g234j 3g24j1';
137 var pattern = /\d/g;
138 var valueArray = [];//值
139 var indexArray = [];//位置
140 var temp = pattern.exec(string);
141 while(temp != null){
142 valueArray.push(temp[0]);
143 indexArray.push(temp.index);
144 temp = pattern.exec(string);
145 }
146 console.log(valueArray,indexArray);*/
147
148 //[3]字符串.replace(待查找内容[字符串|正则],替换内容):在字符串中查找[待查找的内容],然后用[替换内容]替换找到的
149 //[3.1]字符串替换
150 /*var string = 'cat,bat,sat,fat';
151 var result = string.replace('at','ond');
152 console.log(result);//cond,bat,sat,fat*/
153 //[3.2]正则无/g替换
154 /*var string = 'cat,bat,sat,fat';
155 var result = string.replace(/at/,'ond');
156 console.log(result);//cond,bat,sat,fat*/
157 //[3.3]正则有/g替换
158 /*var string = 'cat,bat,sat,fat';
159 var result = string.replace(/at/g,'ond');
160 console.log(result);//cond,bond,sond,fond*/
161 //[3.4]函数替换
162 //在只有一个匹配项(即与模式匹配的字符串)的情况下,会向这个函数传递3个参数:模式的匹配项、模式匹配项在字符串中的位置、原始字符串
163 //在正则表达式定义了多个捕获组的情况下,传递给函数的参数依次是模式的匹配项、第一个捕获组的匹配项、第二个捕获组的匹配项……第N个捕获组的匹配项,但最后两个参数仍然分别是模式的匹配项在字符串中的位置和原始字符串
164 //这个函数返回一个字符串,表示应该被替换的匹配项使用函数作为replace()方法的第二个参数可以实现更加精细的替换操作
165 /*function htmlEscape(text){
166 return text.replace(/[<>"&]/g,function(match,pos,originalText){
167 switch(match){
168 case '<':
169 return '&lt;';
170 case '>':
171 return '&gt;';
172 case '&':
173 return '&amp;';
174 case '\"':
175 return '&quot;';
176 }
177 });
178 }*/
179 //[4]正则.test('字符串'),匹配返回true,否则返回false
180 //在只想知道目标字符串与某个模式是否匹配,但不需要知道其文本内容时很方便,经常用在if语句中
181 /*console.log(/\D/.test('abc'));*/
182 //[5]正则.exec('字符串'),返回包含第一个匹配项信息的数组,没有匹配项时返回null,返回的数组包含两个额外的属性:index和input,index表示匹配项在字符串中位置,input表示当前字符串
183 //在不设置全局标志的情况下,在同一个字符串上多次调用exec()将始终返回第一个匹配项的信息
184 //在设置全局标志的情况下,每次调用exec()都会在字符串中继续查找新匹配项
185 /*var string = 'abcd135e4f6g';
186 //[5.1]不设置/g
187 var pattern = /\d/;
188 console.log(pattern.exec(string));//'1',index:4,input:'abcd135e4f6g'
189 console.log(pattern.exec(string));//'1',index:4,input:'abcd135e4f6g'
190 console.log(pattern.exec(string));//'1',index:4,input:'abcd135e4f6g'
191 //[5.2]设置/g
192 var pattern = /\d/g;
193 console.log(pattern.exec(string));//'1',index:4,input:'abcd135e4f6g'
194 console.log(pattern.exec(string));//'3',index:5,input:'abcd135e4f6g'
195 console.log(pattern.exec(string));//'4',index:6,input:'abcd135e4f6g'*/
196
197 /*******************************************************/
198 //[实例]
199 //[1]两种方法找出字符串中所有的数字
200 //[1.1]用传统字符串操作
201 /*var str1 = 'j1h342jg24g234j 3g24j1';
202 var array = [];
203 var temp = '';
204 for(var i = 0; i < str1.length; i++){
205 var value = parseInt(str1.charAt(i));//如果用number将无法排除空格
206 if(!isNaN(value)){
207 temp += str1.charAt(i);
208 }else{
209 if(temp != ''){
210 array.push(temp);
211 temp = '';
212 }
213 }
214 }
215 if(temp != ''){
216 array.push(temp);
217 temp = '';
218 }
219 console.log(array);*/
220 //[1.2]用正则表达式完成
221 /*var str1 = 'j1h342jg24g234j 3g24j1';
222 array = str1.match(/\d+/g);
223 console.log(array);*/
224 //[2]敏感词过滤(replace回调函数的应用)
225 /*var string = 'f轮功是邪教';
226 var pattern = /f轮功|邪教/g;
227 var result = string.replace(pattern,function($0){
228 var s = '';
229 for(var i = 0; i < $0.length; i++){
230 s+= '*';
231 }
232 return s;
233 })
234 console.log(result);*/
235 //[3]日期格式化
236 /*var array = ['2015.7.28','2015-7-28','2015/7/28','2015.7-28','2015-7.28','2015/7---28'];
237 function formatDate(date){
238 return date.replace(/(\d+)\D+(\d+)\D+(\d+)/,'$1'+'年'+'$2'+'月'+'$3'+'日')
239 }
240 var result = [];
241 for(var i = 0 ; i < array.length; i++){
242 result.push(formatDate(array[i]));
243 }
244 console.log(result);*/
245 //[4]防止跨站脚本攻击xss(css)
246 /*value.innerHTML = content.value.replace(/[<>"&]/g,function($0){
247 switch($0){
248 case '<':
249 return '&lt;';
250 case '>':
251 return '&gt;';
252 case '&':
253 return '&amp;';
254 case '\"':
255 return '&quot;';
256 };
257 })*/
258 //[5]获取网页中的文本内容
259 /*var str = '<p>refds</p><p>fasdf</p>'
260 var pattern = /<[^<>]>/g;*/
261 //[6]去除首尾空格的trim()兼容写法
262 /*var string = ' my name is littlematch ';
263 console.log(string.replace(/^\s+|\s+$/,''));*/
264 //[7]找出重复项最多的字符和个数(关于\1的使用)
265 /*var str = 'aaaaabbbbbdddddaaaaaaaffffffffffffffffffgggggcccccce';
266 var pattern = /(\w)\1+/g;
267 var maxLength = 0;
268 var maxValue = '';
269 var result = str.replace(pattern,function($0,$1){
270 if($0.length > maxLength){
271 maxLength = $0.length;
272 maxValue = $1;
273 }
274 })
275 console.log(maxLength,maxValue);*/
276 //[8]获取class元素(正则中变量的运用及new RegExp中要注意的地方)
277 //在new RegExp中写\s会被解析成s,所以应该写\\s,解析成\s才正确
278 /*function getByClass(obj,classname){
279 var elements = obj.getElementsByTagName('*');
280 var result = [];
281 var pattern = new RegExp( '^|\\s'+ classname + '\\s|$');
282 for(var i = 0; i < elements.length; i++){
283 if(pattern.test(elements[i].className)){
284 result.push(elements[i]);
285 }
286 }
287 }*/

posted @ 2015-10-16 16:36  努力跟随我  阅读(266)  评论(0)    收藏  举报