黑马程序员技术交流社区

标题: java的正则表达式跟javascript的有什么异同 [打印本页]

作者: 房谦    时间: 2011-9-20 08:01
标题: java的正则表达式跟javascript的有什么异同
刚才把问题发到第3期交流区了:L ,大家有没有研究过这个问题
作者: 匿名    时间: 2011-9-20 08:12
这是我以前总结的。希望对你有用。
1.[a-z]在java中匹配一个英文字母。在javascript中,被测试字符串中包含一个英文字幕都被被接受。
2。[a-z]*java匹配纯英文字幕。^[a-z]$在javascript中匹配纯英文字幕。
主要区别为,一个正则表达式,在java中要求被测试字符串完全匹配,在javascript中要求,只要字符串中有一部分匹配就可以。
上边的这个结论对java和javascript中的理解不透彻:
javascript:
match和exec的函数的目的是找到字符串中,符合模式的字符串
match和exec找到尽可能多的字符串
对字符串!取得的是false,对null进行!取得的是true
而java直接得到的就是true或false。

关于javascript的正则表达式。
field.value.match("[a-z]")与(Struts2 Validation这么使用的)
field.value.match(\[a-z]\)含义相同(有的资料上这么说的)
有的资料在讲的时候说正则表达式必须包含在\\之间,有的没说。

关于转义字符
javascript
field = '_jimjimf112gds'
alert(field.match(/\w+/))这样匹配所有字符串。但当使用""时,必须对\\进行转义。也就是说alert(field.match("\\w+"))匹配所有字符串。alert(field.match("\w+"))匹配的是w字母。这是因为字符串使用斜线作为转义字符。"\w"中的\被忽略。也就是:alert(field.match("\w+"))匹配的是w字母。这就体现出在使用\\包含表达式时的优势了——不必转义
在java中也有字符串转义的问题:
System.out.println(Pattern.matches("\\w+","dfsasdf"));
为true,而System.out.println(Pattern.matches("\w+","dfsasdf"));是不能被编译的。

所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。
限定符可以指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。
定位符用于规定匹配模式在目标对象中的出现位置。

field = 'jim\wtoo,totooaztA3213142jimtof112gds'
alert(field.match(/[^a-c]+/))=jim\wtoo,totoo
而alert(field.match(/[^a-c]/))=j
结论是:匹配尽可能多的字符串,是在含有+或*的情况下。

关于javascript优先级:
1.\ 转义符
2.(), (?:), (?=), [] 圆括号和方括号
3.*, +, ?, {n}, {n,}, {n,m} 限定符
4.^, $, \anymetacharacter 位置和顺序
5.|“或”操作
作者: 匿名    时间: 2011-9-22 14:48
Java的正则表达式讲解:(为了能看清,本文正则表达式用中文的句号代替英文句点)
1        英文句点符号:匹配单个任意字符。
eg:
表达式”t。o  可以匹配:tno,t#o,teo等等。不可以匹配:tnno,to,Tno,t正o等。
2        方括号:只有方括号里面指定的字符才参与匹配,也只能匹配单个字符。
eg:
表达式:t[abcd]n  只可以匹配:tan,tbn,tcn,tdn。不可以匹配:thn,tabn,tn等。
3  | 符号。相当与“或”,可以匹配指定的字符,但是也只能选择其中一项进行匹配。
   eg:
   表达式:t(a|b|c|dd)n 只可以匹配:tan,tbn,tcn,tddn。不可以匹配taan,tn,tabcn




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2