JavaScript RegExp 基础详谈
我们知道修饰符m表示多行匹配,而^$表示匹配的开始于结束位置,那么如果这两种情况如果一起使用,或者分别使用,有什么区别呢? 1 var str = 'hellow WorldnWorldnaWorld', 2 pattern1 = /World$/g; 3 pattern2 = /^World$/gm; 4 pattern1.exec(str); // -> index:20 5 pattern2.exec(str); // -> index:13 由此我们可以看出对于正则来说,字符串如果存在多行,那么每一行都会存在^$匹配操作。 · Number 指定重复分组 在分组匹配捕获时,也可以在正则规则中指定n(注:n:1-9)的形式来代指某个分组的值。 示例: 1 var str = 'abcabc', 2 pattern = /(.)b(.)1b2/; 3 pattern.test(str); // -> true 示例:找出重复最多的字符。 1 /* 2 * 方法说明 3 * split('') 将字符通过“空字符”来拆分为数组。 4 * sort() 将数组元素的值按照ASCII码进行排序。 5 * join('') 将数组转换为字符串。 6 7 */ 8 9 var str = 'abcababaaaccddcd', 10 pattern = /(w)1+/g, 11 len = 0, 12 result = '', 13 data = ''; 14 15 str = str.split('').sort().join(''); //通过这些步骤,我们可以得到一个具有相同字符Y一起排列出现的新字符串。aaaaaabbbccccddd 16 while(result = pattern.exec(str)){ 17 18 if(result[0].length > len){ 19 len = result[0].length; 20 data = RegExp.$1; 21 } 22 } · 换行匹配 在正则中字符串的换行是用n进行表示的。 示例: 1 var str = '1.baidun2.googlen3.bing'; 2 var pattern1 = /d/g; //此种方式也可以做到,但是建议使用标准的换行模式。 3 var pattern2 = /^d/gm; 4 document.write(str.replace(pattern1,'#')); 5 document.write(str.replace(pattern2,'#'));
除了RegExp对象具有支持正则表达式的方法外,字符串String对象也具有可以支持正则表达式作为参数进行匹配筛选的的方法。 4.1 replace() 格式:str.replace(pattern,given); 示例: 1 var str = 'i see you See you'; 2 var pattern = /you/; 3 str.replace(pattern,'*'); // -> i see * See you 注意:given所代表替换的指定内容,既可以是字符串,也可以是一个回调函数。 1 var str = 'i see you See you'; 2 var pattern = /byoub/g; 3 str.replace(pattern,function(result,[$1...$9],index,input){}); · result : 表示当前匹配的结果 示例:敏感词过滤 1 var str = '世界上最遥远的距离 不是生与死的距离 而是我就站在你的面前 你却不知道我爱你。', 2 st = ['死','爱','距离'], 3 pattern = '', 4 alt = ''; 5 6 for(var i=0;i<st.length;i++){ 7 8 9 pattern = new RegExp(st[i],'g'); 10 11 for(var j=0;j<st[i].length;j++){ 12 alt+='*'; 13 } 14 15 str = str.replace(pattern,alt); 16 alt = ''; 17 } 示例:回调函数使用 1 var str = '2016/10/29'; 2 var pattern = /(d+)(/)/g; 3 var data = str.replace(pattern,function(result,$1,$2){ 4 return $1+'.'; 5 }); * replace方法只会返回原字符被操作后的副本,并不会对原字符串进行改动。 4.2 match() 格式:str.match(pattern) 如果match的匹配规则是一个正则,并且具有全局g属性,那么match返回的匹配结果,便是一个包含所有匹配结果的纯数组。 1 var str = 'abcdabcda'; 2 var result = str.match(/a/g); 3 result --> [a,a,a] 4 result.input --> undefined 5 result.index --> undefined 4.3 split() 格式:str.split(pattern,length) (编辑:源码网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |