您的位置:首页 > Web前端 > JavaScript

正则表达式在javascript和java中如何使用

2012-10-30 20:43 363 查看
正则表达式只要有两个功能: 模式的检验与替换

 在开始之前先简单介绍一下正则表达式的基础,以下为我做的摘录:

 表示匹配元素的符号

'.' 符号匹配所有字符,包括空格、Tab字符甚至换行符。

'[]' 方括号里面指定参与匹配的字符. eg. 正则表达式“t[aeio]n”只匹配“tan”、“Ten”、“tin”和“ton”。

'(|)' “|”操作符的基本意义就是“或”运算. eg.要匹配“toon”,使用“t(a|e|i|o|oo)n”。这里不能使用[],因为[]只允许匹配单个字符。

'^' 否定的标志 ,如 [^x][a-z]+,表示的首字符不可以为x

'\s':空格标志  eg. "June 12, 1991 ",则表达式为:[a-z]+\s+[0-9]{1,2},\s*[0-9]{4},如果需要提取其中的月份则需要加上圆括号进行分组,([a-z]+)\s+[0-9]{1,2},\s*[0-9]{4},这已经涉及到了字符串的替换了。

 表示匹配次数的符号

 '*':o次或多次 '+':1次或多次  '?':0次或1次  '{n}':匹配n次  '{n,m}':匹配n-m次

如 999-88789-9800  则正则表达式为 :[0-9]{3}\-[0-9]{5}\-[0-9]{4},如果999887899800也算正确的话可以改为:[0-9]{3}\-?[0-9]{5}\-?[0-9]{4}

 一些快捷的符号

\d:[0-9] \D:[^0-9]  \w:[A-Z0-9]  \W[^A-Z0-9] \s:[\t\n\r\f]  \S:[^\t\n\r\f] 

因此我们可以将 [0-9]{3}\-[0-9]{5}\-[0-9]{4} 修改为:\d{3}\-\d{5}\-\d{4}

 

 下面我们将使用一些简单的例子来介绍,需要注意的是在java 和 javascript 使用正则表达式有一点点不同的地方,我这里只介绍使用的方法,不具体介绍各种用法(具体参看Javascript中:http://www.iteye.com/topic/481228  ,java中 :http://blog.csdn.net/b10090120/article/details/7784410

 我们针对字符串:<peter> <lionel>\"www.163.com\"<kenny><>1234 5678  进行操作

Javascript中
<html>
<head>
<title>reg</title>
<script type="text/javascript">
 var str="<peter>dsadasdas<lionel>\"www.163.com\"<kenny><>";
var reg=/(<[^>]*>)/g;    //g (全文查找) i (忽略大小写)m (多行查找)
 //查询到所有符合条件的子字符串
var cc = str.match(reg);
alert(cc[2]);
 //将reg为标准分割数组
arr = str.split(reg);  
alert(arr[1]);
 //replace,替换与正则表达式匹配的子串,其中分组字串放在$1~$9中
alert( str.replace(reg,'替代它')); 
alert(str.replace(reg,"<imgsrc='$1'></img>"));
var ree = /(\d)\s(\d)/;
alert( str.replace(ree,"$2,$1"));//在这个里面$1表示第一个分组1234,$2则表示5678 
 //在字符串中查找时我们常用indexOf,与之对应用于正则查找的方法是search 
alert(str.search(reg));//返回查找到的字符串开始下标0</script>
 </head>
<body>
   Reg测试
</body>
</html>
 

 注附带:

 var re=/@(\S+)+(\s)?/g;      //筛选出 @xx  ,并进行替换

 str=str.replace(re,'<a class="marked-name" href="<person>" rel="weiboAtem-username" name="$1" >@$1</a>');

//拼凑的正则表达式

var userFacesCn ="微笑" ;

var userFaces ="pic_1.gif";

var reg= new RegExp("\\["+userFacesCn+"\\]",'g');

weiboContent = weiboContent.replace(reg,"["+userFaces+"]");

var osVersion = "Ubuntu 8";其中的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

 

 

Java中

String s = "<peter>dddd<lionel>\"www.163.com\"<kenny><>";
    Pattern p =
Pattern.compile("(<[^>]*>)");
    Matcherm = p.matcher(s);
    List<String>result=newArrayList<String>();
    while(m.find()){
        result.add(m.group());
    }
    for(String s1:result){
        System.out.print(s1+’,’);
    }

输出结果为:<peter>,<lionel>,<kenny>,
 
 
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: