你的位置:首页 > Java教程

[Java教程]初识正则表达式


一、字符串操作包括哪些?

search  查找

<script>var str='abcdefd';alert(str.search('a')); //返回0,从0开始alert(str.search('bc')); //返回1,这个1是bc出现的位置,search只找第一次出现的位置alert(str.search('g')); //返回要查找的字符串第一次出现的位置,没有返回-1</script>

substring  获取子字符串

<script>var str='abcdef';alert(str.substring(1, 4)); //substring有两个参数,起始位置和结束位置,这里返回bcd(不是bcde),不包括结束位置的字母// alert(str.substring(1)); 只给第一个参数时,一直取到字符串结束,返回bcdef</script>

charAt  获取某个字符

<script>var str='abcdef';alert(str.charAt(2)); //取第2个位置上的字符,返回c</script>

split  分割字符串,获得数组; 

<script>var str='abc-12-u-qw';var arr=str.split('-'); //- 用引号包裹alert(arr);  //返回一个数组,abc,12,u,qwalert(arr[0]); //返回数组的第0个abc</script>

二、什么是正则表达式?如何创建正则对象?

规则、模式,强大的字符串匹配工具;
创建正则对象:
JS风格  —>   new RegExp(“a”, “i”)perl风格 —>  /a/i

<script>var str='abcdef';var re=new RegExp('a');  //字符串时候包含a//var re=new RegExp('a', 'i');  //第一个参数是正则表达式本身,第二个参数也是一个字符串,i表示忽略大小写var re=/a/i;  //简写  双斜杠里面的就是规则alert(re.test(str));  //test方法,检验这个字符串是否符合正则表达式的规则;这里返回true</script>

三、正则有几种选项?分别是什么意思?



g和i    g全局;i忽略大小写;
四、search、match、replace是做什么的?怎么用?
<script>var str='asdf 443 vczxv 55';var re=/\d/;   // \d在正则里表示数字alert(str.search(re));  //返回5; 数字4在第5个位置;使用正则就很快找出来第一个数字出现的位置</script>

match 获取匹配的项目

<script>var str='sdf e443 fedef  55 66gg 333322312 dff 99';var re=/\d+/g;  //g全局匹配  \d 表示“一个”数字 \d\d 表示“两个”数字。+ 量词 多个,任意长度;\d+ 表示多个数字;返回的是443,55,66...// var re=/\d/g;   返回的是  4,4,3,5,5,6,6.... 拆开了alert(str.match(re));  //match匹配</script>

repalce  只替换第一个  replace(a,b)表示把a替换成b

<script>var str='abacdAef';alert(str.replace('a', 'T'));  //返回TbacdAef  只替换第一个</script>

<script>var str='abacdAef';alert(str.replace(/a/gi, 'T'));  //替换全部 而且 忽略大小写</script>

var re=/我们|你们|他们/g;  //中间的竖线表示 或 的意思oTxt2.value=oTxt1.value.replace(re, '**');

五、字符类([])包括几种情况?

<script>var str='1b2 abc 1c2 ee';var re=/1[abc]2/g;  //1.方括号-->或者,表示a或者b或者c 单个字符 [a,b]表示a或者逗号或者b 2.方括号表示范围:[0-9]表示所有的数字;[a-z]表示所有的字母;[0-9a-z]结合起来用表示数字或者字母;// \d 就是[0-9]的简写alert(str.match(re));  //1b2,1c2</script>

任意字符  [abc]   表示a或者b或者c 单个字符 [a,b]表示a或者逗号或者b

范围   [a-z]、[0-9]     [0-9]表示所有的数字;[a-z]表示所有的字母;[0-9a-z]结合起来用表示数字或者字母; \d 就是[0-9]的简写


排除   [^a]   除了a以外所有的内容
 
六、正则有哪些转义字符?分别是什么意思?

.(点)——任意字符

\d、\w、\s      \w   word  即 [a-z0-9_] 英文、数字、下划线     \s       space  空白

\D、\W、\S      \D和\d正好相反;表示[^0-9] 非数字;  \W  表示除了英文、数字、下划线;

<script>var str='  fd rr  erre fff  ';alert(str.replace(/\s+/g, ''));  //去掉空格</script>

七、什么是量词?各个量词分别有什么作用?

基本形式是:

{n,m}   最少n次,最多m次

{n,}   最少n次,最多不限;即:至少n次

{n}   正好n次

{,n}  最小不限,最多n次

{n,}        至少n次

*        任意次        相当于{0,}  不建议使用;

?        零次或一次        {0,1}

+        一次或任意次{1,}

<script>var str='我的QQ是:258344567,你的是4487773吗?';var re=/[1-9]\d{4,10}/g;  //挑出两个qq号alert(str.match(re));</script>

例子:校验邮箱:  若用中文写:    一串字母,数字,下划线   @  一串字母,数字   .   2到4个字母

var re=/^\w+@[a-z0-9]+\.[a-z]{2,4}$/;  //^表示行首,$表示行尾  中间的必须符合要求 \.表示点本身         if(re.test(oTxt.value))        {            alert('对了');        }        else        {            alert('你写错了');        }

加行首和行尾是必要的;不加的话,表示包含规则的就匹配成功 --> 比如      中文asdj@123.comere    这种也会匹配成功;因为中文asdj@123.comere   中的部分符合规则;

通过行首和行尾,去掉首尾的空格:<script>var str='  ffe ww ee fewf   ';var re=/^\s+|\s+$/g;  //去掉首尾的空格,中间的空格保留alert('('+str.replace(re, '')+')');</script>

检测中文:

<script>var str='asdfb 34啊 +_=45 ';var re=/[\u4e00-\u9fa5]/;  //检测是否有中文存在;u表示utf8编码;4e00表示第一个汉字,9fa5是最后一个alert(re.test(str));   //true,str中有中文</script>

单词边界   \b

完美版getByClass

<script>function getByClass(oParent, sClass){    var aEle=oParent.getElementsByTagName('*');    var aResult=[];    var re=new RegExp('\\b'+sClass+'\\b', 'i');   // \b是单词边界    var i=0;         for(i=0;i<aEle.length;i++)    {        if(re.test(aEle[i].className))        {            aResult.push(aEle[i]);        }    }    return aResult;}</script>