<script src="js/jquery-1.3.2.min.js" type="text/javascript"></script>
<script type="text/javascript">
/*
前面的<(.*)>可以匹配一个<abc>之类的文本中的abc
后面的是对它的引用,再加上/,就可以得到</abc>了
组合在一起就可以了匹配<abc>123456789abc</abc>这类的文本了。
当然,既然是分组,也可以给这个组起个名字,以方便调用。
对比下面这个看看
<(?<aaa>.*)>.*</k<aaa>>
这里的组名就是 aaa 了
-----------------------------------------------
是对第一个括号里的内容进行应用吗?那则是对第二个括号里的内容进行引用咯
的确是这样,不过注意一下,是小括号哦
再举个例子吧
原始文本是 <abc c=ss>00000000000</abc c=ss>
可以使用这样的正则表达式,当然,只是为了说明,实际操作中这样反而麻烦了
<(.*)s(c=ss)>.*</s> */
jQuery(function($){
$("ul").each(function(i){
$(this).find("li.bad").prev("li").find("input").attr("checked",true);
})
var txt = $("#text").html();
//re = /^http([^.]*).$/i //决断是否以http 开头 .结尾
re = /^http.*.$/i //决断是否以http 开头 .结尾
//re = /(^http)|(.$)/i
//re = /[^0-9]/i
//re = /sdBsd/i
//alert(re.test(txt));
var x = "aaaabbbbcccde";
var num ="ag12";
//alert(x.replace(/.*?(.)(?!)/g,"$1"));//判断重复的字母
re = /.*?(.)(?!)/g
//alert(re.test(x));
var textNum = "234.0";
reNum = /^d{3}$/igm; //判断是否为三位数
//alert(reNum.test(textNum));
var txtIP = "12.212.222.123";//判断IP.深入了解其它情况
reIP = /(d{1,3}.){3}d{1,3}/i;
//alert(reIP.test(txtIP));
var textLianxu ="1221";
reLianxu =/^d{3}(?!d)/;
//alert(reLianxu.test(textLianxu));
var textDate = "1982-012-22";
reDate = /^(19|20)d{2}-(0?d|1[012])-(0?d|[12]d|3[01])$/; //判断日期.
//alert(reDate.test(textDate));
var textDate01 = "111";
reDate01 = /^d$/;
//alert(reDate01.test(textDate01));////判断只能输入一个字符
var textFloat = "04442333511.1243";
reFloat = /^(?=0)(d{11}).(d){4}$/i;
//alert(reFloat.test(textFloat));////判断浮点数
var textChar = "__";
reChar = /^[A-Z|a-z]+|[d]+|[u4e00-u9fa5]+$/i;
//alert(reChar.test(textChar)); ////判断 限大小字母数字汉字
/********************* replace***********************/
var textContent = "//congradulation for you about\\ the// grad\\!";
alert(textContent.search('cff'));
if(textContent.search('cff') != -1)
{
alert(textContent.replace(////g, ""));
}
})
</script>
<ul>
<li><input type="radio" name="g1" value="g1">good</li>
<li class="bad">badli</li>
</ul>
<ul>
<li><input type="radio" name="g2" value="g2">good</li>
<li class="bad">badli55</li>
</ul>
<div id="text">http hove dfsaf sdfsdf.</div>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>FOO API</title>
</head>
<script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
<script type="text/javaScript">
$(function() {
var aValue="http://www.163.com/";
//aValue = aValue.replace(/http://(.+)/[^/]*/i,'$1');
aValue = aValue.replace(/[^a-z]/g,'');
alert(aValue);
arr = aValue.split(',');
for(var i= 0; i< arr.length; i++ ){
//alert(arr[i]);
}
re = /zo*/;
str = "azoo";
alert(str.replace(re,""));//在这个里面$1表示第一个分组1234,$2则表示5678
});
</script>
<style type="text/css">
#menu1 span,
#menu2 span{
display:none;
}
</style>
<body>
</body>
</html>
精通 JS正则表达式 (精通?标题党 )
正则表达式可以:
•测试字符串的某个模式。例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式。这称为数据有效性验证
•替换文本。可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字
•根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定文字
正则表达式语法
一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
创建正则表达式
var re = new RegExp();//RegExp是一个对象,和Aarray一样 //但这样没有任何效果,需要将正则表达式的内容作为字符串传递进去 re =new RegExp("a");//最简单的正则表达式,将匹配字母a re=new RegExp("a","i");//第二个参数,表示匹配时不分大小写
var re = new RegExp("a","gi");//匹配所有的a或A
var re = /a/gi;
//test方法,测试字符串,符合模式时返回true,否则返回false var re = /he/;//最简单的正则表达式,将匹配he这个单词 var str = "he"; alert(re.test(str));//true str = "we"; alert(re.test(str));//false str = "HE"; alert(re.test(str));//false,大写,如果要大小写都匹配可以指定i标志(i是ignoreCase或case-insensitive的表示) re = /he/i; alert(re.test(str));//true str = "Certainly!He loves her!"; alert(re.test(str));//true,只要包含he(HE)就符合,如果要只是he或HE,不能有其它字符,则可使用^和$ re = /^he/i;//脱字符(^)代表字符开始位置 alert(re.test(str));//false,因为he不在str最开始 str = "He is a good boy!"; alert(re.test(str));//true,He是字符开始位置,还需要使用$ re = /^he$/i;//$表示字符结束位置 alert(re.test(str));//false str = "He"; alert(re.test(str));//true //当然,这样不能发现正则表达式有多强大,因为我们完全可以在上面的例子中使用==或indexOf re = /s/;// s匹配任何空白字符,包括空格、制表符、换页符等等 str= "user Name";//用户名包含空格 alert(re.test(str));//true str = "user Name";//用户名包含制表符 alert(re.test(str));//true re=/^[a-z]/i;//[]匹配指定范围内的任意字符,这里将匹配英文字母,不区分大小写 str="variableName";//变量名必须以字母开头 alert(re.test(str));//true str="123abc"; alert(re.test(str));//false
var osVersion = "Ubuntu 8";//其中的8表示系统主版本号 var re = /^[a-z]+s+d+$/i; //+号表示字符至少要出现1次,s表示空白字符,d表示一个数字 alert(re.test(osVersion));//true,但我们想知道主版本号 //另一个方法exec,返回一个数组,数组的第一个元素为完整的匹配内容 re=/^[a-z]+s+d+$/i; arr = re.exec(osVersion); alert(arr[0]);//将osVersion完整输出,因为整个字符串刚好匹配re //我只需要取出数字 re=/d+/; var arr = re.exec(osVersion); alert(arr[0]);//8
//exec返回的数组第1到n元素中包含的是匹配中出现的任意一个子匹配 re=/^[a-z]+s+(d+)$/i;//用()来创建子匹配 arr =re.exec(osVersion); alert(arr[0]);//整个osVersion,也就是正则表达式的完整匹配 alert(arr[1]);//8,第一个子匹配,事实也可以这样取出主版本号 alert(arr.length);//2 osVersion = "Ubuntu 8.10";//取出主版本号和次版本号 re = /^[a-z]+s+(d+).(d+)$/i;//.是正则表达式元字符之一,若要用它的字面意义须转义 arr = re.exec(osVersion); alert(arr[0]);//完整的osVersion alert(arr[1]);//8 alert(arr[2]);//10
//replace方法,用于替换字符串 var str ="some money"; alert(str.replace("some","much"));//much money //replace的第一个参数可以为正则表达式 var re = /s/;//空白字符 alert(str.replace(re,"%"));//some%money //在不知道字符串中有多少空白字符时,正则表达式极为方便 str ="some some some "; re = /s+/; alert(str.replace(re,"#"));//但这样只会将第一次出现的一堆空白字符替换掉 //因为一个正则表达式只能进行一次匹配,s+匹配了第一个空格后就退出了 re = /s+/g;//g,全局标志,将使正则表达式匹配整个字符串 alert(str.replace(re,"@"));//some@some@some@ //另一个与之相似的是split var str = "a-bd-c"; var arr = str.split("-");//返回["a","bd","c"] //如果str是用户输入的,他可能输入a-bd-c也可能输入a bd c或a_bd_c,但不会是abdc(这样就说他输错了) str = "a_db-c";//用户以他喜欢的方式加分隔符s re=/[^a-z]/i;//前面我们说^表示字符开始,但在[]里它表示一个负字符集 //匹配任何不在指定范围内的任意字符,这里将匹配除字母处的所有字符 arr = str.split(re);//仍返回["a","bd","c"]; //在字符串中查找时我们常用indexOf,与之对应用于正则查找的方法是search str = "My age is 18.Golden age!";//年龄不是一定的,我们用indexOf不能查找它的位置 re = /d+/; alert(str.search(re));//返回查找到的字符串开始下标10 //注意,因为查找本身就是出现第一次就立即返回,所以无需在search时使用g标志 //下面的代码虽然不出错,但g标志是多余的 re=/d+/g; alert(str.search(re));//仍然是10
var str = "My name is CJ.Hello everyone!"; var re = /[A-Z]/;//匹配所有大写字母 var arr = str.match(re);//返回数组 alert(arr);//数组中只会包含一个M,因为我们没有使用全局匹配 re = /[A-Z]/g; arr = str.match(re); alert(arr);//M,C,J,H //从字符串中抽取单词 re = /[a-z]*/gi;//表示单词边界 str = "one two three four"; alert(str.match(re));//one,two,three,four
var re = /[a-z]/i; alert(re.source);//将[a-z]字符串输出 //请注意,直接alert(re)会将正则表达式连同前向斜线与标志输出,这是re.toString方法定义的
var re = /[A-Z]/; //exec方法执行后,修改了re的lastIndex属性, var str = "Hello,World!!!"; var arr = re.exec(str); alert(re.lastIndex);//0,因为没有设置全局标志 re = /[A-Z]/g; arr = re.exec(str); alert(re.lastIndex);//1 arr = re.exec(str); alert(re.lastIndex);//7
var re = /[A-Z]/; var str = "Hello,World!!!"; re.lastIndex = 120; var arr = re.exec(str); alert(re.lastIndex);//0
//input 最后用于匹配的字符串(传递给test,exec方法的字符串) var re = /[A-Z]/; var str = "Hello,World!!!"; var arr = re.exec(str); alert(RegExp.input);//Hello,World!!! re.exec("tempstr"); alert(RegExp.input);//仍然是Hello,World!!!,因为tempstr不匹配 //lastMatch 最后匹配的字符 re = /[a-z]/g; str = "hi"; re.test(str); alert(RegExp.lastMatch);//h re.test(str); alert(RegExp["$&"]);//i ,$&是lastMatch的短名字,但由于它不是合法变量名,所以要。。 //lastParen 最后匹配的分组 re = /[a-z](d+)/gi; str = "Class1 Class2 Class3"; re.test(str); alert(RegExp.lastParen);//1 re.test(str); alert(RegExp["$+"]);//2 //leftContext 返回被查找的字符串中从字符串开始位置到最后匹配之前的位置之间的字符 //rigthContext 返回被搜索的字符串中从最后一个匹配位置开始到字符串结尾之间的字符 re = /[A-Z]/g; str = "123ABC456"; re.test(str); alert(RegExp.leftContext);//123 alert(RegExp.rightContext);//BC456 re.test(str); alert(RegExp["$`"]);//123A alert(RegExp["$'"]);//C456
alert(RegExp.multiline); //因为IE,Opera不支持这个属性,所以最好还是单独指定 var re = /w+/m; alert(re.multiline); alert(RegExp["$*"]);//RegExp对象的静态属性不会因为给RegExp某个对象实例指定了m标志而改变 RegExp.multiline = true;//这将打开所有正则表达式实例的多行匹配模式 alert(RegExp.multiline);
var str = "?"; var re = /?/; alert(re.test(str));//出错,因为?是元字符,必须转义 re = /?/; alert(re.test(str));//true
var str = "?"; alert(str);//只会输出? var re = /?/;//将匹配? alert(re.test(str));//true re = new RegExp("?");//出错,因为这相当于re = /?/ re = new RegExp("\?");//正确,将匹配? alert(re.test(str));//true
loading