JavaScript正则表达式入门

原创 2013年12月04日 09:51:31

 

<html>
<head>
<TITLE>检查双字符</TITLE> 
<script language=javaScript>
//一下例子摘抄自http://www.iteye.com/topic/940835
//如果 match 方法没有找到匹配,返回 null。如果找到匹配返回一个数组并且更新全局 RegExp 对象的属性以反映匹配结果。
function testMatch(){
	var toMatch = "a bat, a cat, a fAt baT, a faT cat"; 
	var regexp = /at/gi;
	var array = toMatch.match(regexp);
	alert(array.length);
	for(var i =0; i < array.length; i++){
		alert(array[i]);
	}
}

function testExec(){
	var toMarch7 = "1 3 4 5"; 
	var regExp7 = /(\d+)\s*(\d+)/g; 
	var result7 
	while((result7= regExp7.exec(toMarch7)) !=null){ 
	 alert(result7);//分别为1 3,1,3 和 4 5,4,5 
	 alert(regExp7.lastIndex);//分别为3和7 
	} 
}

//如果找到一个匹配,search 方法将返回一个整数值,指明这个匹配距离字符串开始的偏移位置。如果没有找到匹配,则返回 -1。
function SearchDemo(){
   var r, re;                   // 声明变量。
   var s = "The rain in Spain falls mainly in the plain.";
   re = /falls/i;            // 创建正则表达式模式。
   r = s.search(re);            // 查找字符串。
   alert(r);
}

function testReplace(){
	var sToChange = "The sky is red"; 
	alert(sToChange);
	var reRed = /red/; 
	var result = sToChange.replace(reRed,"blue");    //输出The sky is blue 
	alert(result);
}

function testSpilte(){
	var sColor = "red, blue, yellow"; 
	var reExp = /\,/; 
	var arrs = sColor.split(reExp);
	//得到一个数组["red","blue","yellow"]
	for(var i = 0; i < arrs.length; i++){
		alert(arrs[i]);	
	}
}

function testScope(){
	var toMatch = "a bat, a cat, a fAt baT, a faT cat"; 
	var reg = /[bcf]at/gi ; 
	var arrs = toMatch.match(reg);
	//返回的数组["bat", "Cat", "fAt", "baT", "faT", "cat"]
	for(var i = 0; i < arrs.length; i++){
		alert(arrs[i]);	
	}
}

function testLogic(){
	var toMarch4 = "dog"; 
	var toMarch5 = "cat"; 
	var regExp4 = /dog|cat/; 
	alert(regExp4.test(toMarch4));//true 
	alert(regExp4.test(toMarch5));//true 	
}
/*
replacement 既可以是一个替换的字符串,也可以是一个function
如果是function的情况, 这个function会为每一个匹配执行一次,这个function的返回值作为最终替换的字符串.
*/
function testOrReplace(){
	var userInput = "badWord1asdasdandBadWord2"; 
	var toMarch6 = /badword1|badword2/gi; 
	var newStr = userInput.replace(toMarch6, function(march){ 
		return march.replace(/./g,"*"); 
	}); 
	alert(newStr);	
}
 
//将&替换为&amp;,将'替换为&#39;
function SDReplaceData()
{
	var objStr = "huang&bi'ao";
    var temp = objStr.replace( /(\&|\')/g,
		function($0, $1)
		{
			return{
			"&" : "&amp;",
			"'" : "&#39;"
			}[$1];
		}
	);
	alert(temp);
}

function getAllWord(){
	var toMarch5 = "First Second Third Fourth Fifth Sixth"; 
	var regExp5 = /\b(\S+?)\b/g ; //或者 /\b(\S+)\b/g 和 /(\w+)/g 
	var arrs = toMarch5.match(regExp5); 
	//First Second Third Fourth Fifth Sixth 
	for(var i = 0; i < arrs.length; i++){
		alert(arrs[i]);	
	}
	
}

function checkNumber(){
	var pid = /\d{15}|\d{18}/;//身份证
	var mphone = /\d{11}/;//手机号码
	var phone = /\d{3,4}-\d{7,8}/;//电话号码
	
	if(mphone.test("13893939392")){
		alert("这是手机号码");	
	}//true
	if(phone.test("010-99392333")){
		alert("这是座机号码");	
	}//true
	if(phone.test("0771-3993923")){
		alert("这是座机号码");	
	}//true	
	if(pid.test("33302222222220511X")){
		alert("这是身份证号码");	
	}
}

//多行匹配
function oneMoreLine(){
	var pattern = /^javascript/;
	alert(pattern.test("java\njavascript"));//false
	pattern = /^javascript/m;  //多行搜索开关(重定义^与$的意义)
	alert(pattern.test("java\njavascript"));//true
}

/*前瞻:
表示当某个特定的字符分组出现在另一个字符串之前时才去捕获它.
前瞻分正向前瞻 和负向前瞻 , 正向前瞻检查的是接下来出现的是不是某个特定的字符集. 而负向前瞻则是检查接下来的不应该出现的特定字符集.
正向前瞻需要将模式放在(?= 和 ) 之间,注意这不是分组,虽然它也用到括号. 负向前瞻需要将模式放在(!= 和 ) 之间.
*/
function testForward(){
	var toMarch1 = "bedroom"; 
	var toMarch2 = "bedding"; 
	var bedReg = /(bed(?=room))/; 
	var bedReg2 = /(bed(!=room))/;
	alert("正向匹配 : " + bedReg.test(toMarch1)); //true 
	alert("负向匹配 : " + bedReg2.test(toMarch1));
	//bed,bed 因此这个正则表达式返回的第一个匹配是bed,而不是bedroom,但是它只会去匹配后面跟着 room的bed,有点搞 
	alert(bedReg.exec(toMarch1)); 
	alert(RegExp.$1); //bed 
	alert(bedReg.test(toMarch2)); //false
}


/*
非捕获分组:将子表达式放在“?:”符号后,并使用()括起来构成
捕获分组:如果使用普通的()是捕获性质的分组,它匹配的结果会被记录下来,耗费较多的时间
根据环境到底是使用捕获性质的分组还是非捕获性质的分组
*/
function testUncapture(){
	var regExp = /huang(?:biao)/gi;
	var str = "adsjlfjdhuangbiaodfas";
	var arrs = str.match(regExp);
	for(var i = 0; i < arrs.length; i++){
		alert(arrs[i]);	
	}
}

function testUncapture2(){
	var str="img1.jpg,img2.gif,img3.bmp";
	var reg = /(?:\w*)(?=\.gif)/;
	var result = str.match(reg);
	alert(result);
}
</script>
<link rel="stylesheet" href="../style.css"></head>
<body >

<input type="button" value="match方法" onClick="testMatch()"><br>
<input type="button" value="exec方法" onClick="testExec()"><br>
<input type="button" value="SearchDemo方法" onClick="SearchDemo()"><br>
<input type="button" value="Replace方法" onClick="testReplace()"><br>
<input type="button" value="Spilte方法" onClick="testSpilte()"><br>
<input type="button" value="取值范围" onClick="testScope()"><br>
<input type="button" value="并集" onClick="testLogic()"><br>
<input type="button" value="function替换" onClick="testOrReplace()"><br>
<input type="button" value="JSON替换" onClick="SDReplaceData()"><br>
<input type="button" value="得到所有的单词" onClick="getAllWord()"><br>
<input type="button" value="检查数字" onClick="checkNumber()"><br>
<input type="button" value="多行匹配" onClick="oneMoreLine()"><br>
<input type="button" value="前瞻" onClick="testForward()"><br>
<input type="button" value="非捕获分组" onClick="testUncapture()"><br>
<input type="button" value="前瞻和非捕获分组" onClick="testUncapture2()"><br>
</body>
</html>
 

 

正则表达式30分钟入门教程

本文目标   30分钟内让你明白正则表达式是什么,并对它有一些基本的了解,让你可以在自己的程序或网页里使用它。   如何使用本教程   最重要的是——请给我30分钟, 如果你没有使用正则表达式的经...
  • Long_Xiao_Yun
  • Long_Xiao_Yun
  • 2016年03月30日 17:12
  • 2869

正则表达式10分钟入门教程

1 前言 编写验证规则最流行和最简单的方法就是正则表达式了,但唯一的一个问题是正则表达式的语法太隐晦了,让人蛋疼无比。很多开发者为了在项目中应用复杂的验证,经常要使用一些小抄来记住正则式的复杂语法和...
  • gusgao
  • gusgao
  • 2015年09月14日 08:35
  • 2709

正则表达式入门(js例子)

网上的正则表达式教程多种多样,不过大多是都是直接贴出来正则的一些语法,可能会让大多数刚刚接触到正则的然摸不着头脑。。。 比如js的 test()方法怎么使用正则表达式那,php那些正则函数怎么使用都是...
  • u014017080
  • u014017080
  • 2016年11月23日 16:26
  • 1472

javascript 正则表达式入门基础—由浅入深

javascript 正则表达式 //javascript正则表达式的基本知识 //声明javascript 正则表达式 var reCat = ne...
  • a125138
  • a125138
  • 2012年08月11日 19:38
  • 2314

JavaScript中的正则表达式快速入门

RegExp 对象用于规定在文本中检索的内容。 什么是 RegExp? RegExp 是正则表达式的缩写。 当您检索某个文本时,可以使用一种模式来描述要检索的内容。RegExp 就是这种模式。 简...
  • liup10000
  • liup10000
  • 2013年07月17日 17:00
  • 990

javascript简单的正则表达式入门

内容来自百度前端学院javascript入门课程 基本的HTML:
  • sinat_32266863
  • sinat_32266863
  • 2017年07月15日 00:53
  • 72

[入门]javascript正则表达式

正则表达式,又称正规表示法。它使用单个字符串来描述、匹配一系列符合某个规律的字符串。 在很多文本编辑器中,正则表达式用于检索、替换某些符合某种规则的文本。声明正则在 js 中,声明正则,有两种方式:...
  • linfenpan
  • linfenpan
  • 2015年10月20日 15:47
  • 341

JavaScript正则表达式从放弃到入门

有的人会问,对于JSer来说,正则表达式重要吗,是不是可以跳过这个似乎特别多变需要记很多规则的知识块。我的回答是正则表达式真的是一个强大的杀器,用来把哪些乱七八糟的字符串里查找、替换、提取工作上,绝对...
  • Mr_jier
  • Mr_jier
  • 2016年05月14日 12:19
  • 453

JavaScript语法入门系列(七) 类和对象(正则表达式RegExp)

8.4 正则表达式RegExp RegExp 对象表示正则表达式,它可以对字符串执行模式匹配,从而拆分,查找和替换字符串中匹配的子串。这些在第三章的String对象部分已经介绍了。具体正则表达式的规...
  • xiao_rory
  • xiao_rory
  • 2012年07月28日 16:07
  • 542

javascript 正则表达式入门到高级-03

go~on~正则之小例子-->大补充: 1:var arr = 'this is 8(baidusohu orsorft)8';var re = /8(.*)8/;document.write(arr...
  • baidu_33033415
  • baidu_33033415
  • 2017年03月17日 10:17
  • 84
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JavaScript正则表达式入门
举报原因:
原因补充:

(最多只允许输入30个字)