|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
因为能用到多少功能就用多少,不能用就不用!总的来说:要简单要性能好,可以不用框架。你说java复杂,就是因为你把java(j2ee)与这些框架混在了一起。正则正则表达式是一个形貌字符形式的对象。
JavaScript的RegExp对象和String对象界说了利用正则表达式来实行壮大的形式婚配和文本检索与交换函数的办法.
***********************
JavaScript//
***********************
在JavaScript中,正则表达式是由一个RegExp对象暗示的.固然,可使用一个RegExp()机关函数来创立RegExp对象,
也能够用JavaScript1.2中的新增加的一个特别语法来创立RegExp对象.就像字符串间接量被界说为包括在引号内的字符一样,
正则表达式间接量也被界说为包括在一对斜杠(/)之间的字符.以是,JavaScript大概会包括以下的代码:
varpattern=/s$/;
这行代码创立一个新的RegExp对象,并将它赋给变量parttern.这个特别的RegExp对象和一切以字母"s"开头的字符串都婚配.用RegExp()也能够界说
一个等价的正则表达式,代码以下:
varpattern=newRegExp("s$");
不管是用正则表达式间接量仍是用机关函数RegExp(),创立一个RegExp对象都是对照简单的.较为坚苦的义务是用正则表达式语法来形貌字符的形式.
JavaScript接纳的是Perl言语正则表达式语法的一个相称完全的子集.
正则表达式的形式标准是由一系列字符组成的.年夜多半字符(包含一切字母数字字符)形貌的都是依照字面意义举行婚配的字符.如许说来,正则表达式/java/就和
一切包括子串"java"的字符串相婚配.固然正则表达式中的别的字符不是依照字面意义举行婚配的,但它们都具有特别的意义.正则表达式/s$/包括两个字符.
第一个特别字符"s"是依照字面意义与本身相婚配.第二个字符"$"是一个特别字符,它所婚配的是字符串的开头.以是正则表达式/s$/婚配的就是以字母"s"开头
的字符串.
1.间接量字符
我们已发明了,在正则表达式中一切的字母字符和数字都是依照字面意义与本身相婚配的.JavaScript的正则表达式还经由过程以反斜杠()开首的本义序列撑持某些非
字母字符.比方,序列"
"在字符串中婚配的是一个间接量换行符.在正则表达式中,很多标点标记都有特别的寄义.上面是这些字符和它们的寄义:
正则表达式的间接量字符
字符婚配
________________________________
字母数字字符本身
f换页符
换行符
回车
制表符
v垂直制表符
/一个/间接量
一个间接量
.一个.间接量
*一个*间接量
+一个+间接量
?一个?间接量
|一个|间接量
(一个(间接量
)一个)间接量
[一个[间接量
]一个]间接量
{一个{间接量
}一个}间接量
XXX由十进制数XXX指定的ASCII码字符
Xnn由十六进制数nn指定的ASCII码字符
cX把持字符^X.比方,cI等价于 ,cJ等价于
___________________________________________________
假如想在正则表达式中利用特别的标点标记,必需在它们之前加上一个"".
2.字符类
将独自的间接符放进中括号内就能够组分解字符类.一个字符类和它所包括的任何一个字符都婚配,以是正则表达式/[abc]/和字母"a","b","c"中的任何一个
都婚配.别的还能够界说否认字符类,这些类婚配的是除那些包括在中括号以内的字符外的一切字符.界说否认字符尖时,要将一个^标记作为从左中括号算起的第
一个字符.正则表达式的汇合是/[a-zA-z0-9]/.
因为某些字符类十分经常使用,以是JavaScript的正则表达式语法包括一些特别字符和本义序列来暗示这些经常使用的类.比方,s婚配的是空格符,制表符和别的空缺符,s
婚配的则是空缺符以外的任何字符.
正则表灰式的字符类
字符婚配
____________________________________________________
[...]位于括号以内的恣意字符
[^...]不在括号当中的恣意字符
.除换行符以外的恣意字符,等价于[^
]
w任何单字字符,等价于[a-zA-Z0-9]
W任何非单字字符,等价于[^a-zA-Z0-9]
s任何空缺符,等价于[
fv]
S任何非空缺符,等价于[^
fv]
d任何数字,等价于[0-9]
D除数字以外的任何字符,等价于[^0-9]
[]一个退格间接量(惯例)
________________________________________________________________
3.复制
用以上的正则表式的语法,能够把两位数形貌成/dd/,把四位数形貌成/dddd/.但我们还没有一种办法能够用来形貌具有恣意多半位的数字大概是一个
字符串.这个串由三个字符和跟从在字母以后的一名数字组成.这些庞大的形式利用的正则表达式语法指定了该表达式中每一个元素要反复呈现的次数.
指定复制的字符老是呈现在它们所感化的形式前面.因为某种复制范例相称经常使用.以是有一些特别的字符专门用于暗示它们.比方:+号婚配的就是复制前一形式一次
或屡次的形式.上面的表列出了复制语法.先看一个例子:
/d{2,4}///婚配2到4间的数字.
/w{3}d?///婚配三个单字字符和一个恣意的数字.
/s+javas+///婚配字符串"java",而且该串前后能够有一个或多个空格.
/[^"]*///婚配零个或多个非引号字符.
正则表达式的复制字符
字符寄义
__________________________________________________________________
{n,m}婚配前一项最少n次,可是不克不及凌驾m次
{n,}婚配前一项n次,大概屡次
{n}婚配前一项刚好n次
?婚配前一项0次或1次,也就是说前一项是可选的.等价于{0,1}
+婚配前一项1次或屡次,等价于{1,}
*婚配前一项0次或屡次.等价于{0,}
___________________________________________________________________
4.选择,分组和援用
正则表达式的语法还包含指定选择项,对子表达式分组和援用前一子表达式的特别字符.字符|用于分开供选择的字符.比方:/ab|cd|ef/婚配的是字符串"ab",大概是
字符串"cd",又大概"ef"./d{3}|[a-z]{4}/婚配的是要末是一个三位数,要末是四个小写字母.在正则表达式中括号具有几种感化.它的次要感化是把独自的项目分组
成子表达式,以即可以像处置一个自力的单位那种用*、+或?来处置那些项目.比方:/java(script)?/婚配的是字符串"java",厥后既能够有"script",也能够没有./
(ab|cd)+|ef)/婚配的既能够是字符串"ef",也能够是字符串"ab"大概"cd"的一次或屡次反复.
在正则表达式中,括号的第二个用处是在完全的形式中界说子形式。当一个正则表达式乐成地和方针字符串相婚配时,能够从方针串中抽出和括号中的子形式相婚配
的部分.比方,假定我们正在检索的形式是一个或多个字母前面跟从一名或多位数字,那末我们可使用形式/[a-z]+d+/.可是因为假定我们真正体贴的是每一个婚配
尾部的数字,那末假如我们将形式的数字部分放在括号中(/[a-z]+(d+)/),我们就能够从所检索到的任何婚配中抽取数字了,以后我们会对此举行剖析的.
代括号的子表达式的另外一个用处是,同意我们在统一正则表达式的前面援用后面的子表达式.这是经由过程在字符串后加一名或多位数字来完成的.数字指的是代括号的
子表达式在正则表达式中的地位.比方:1援用的是第一个代括号的子表达式.3援用的是第三个代括号的子表达式.注重,因为子表达式能够嵌套在别的子表达式中,
以是它的地位是被计数的左括号的地位.
比方:鄙人面的正则表达式被指定为2:
/([Jj]ava([Ss]cript))siss(funw*)/
对正则表达式中前一子表达式的援用所指定的并非谁人子表达式的形式,而是与谁人形式相婚配的文本.如许,援用就不但是匡助你输出正则表达式的反复部分的快
捷体例了,它还实行了一条规约,那就是一个字符串各个分别的部分包括的是完整不异的字符.比方:上面的正则表达式婚配的就是位于单引号或双引号以内的一切字
符.可是,它请求入手下手和停止的引号婚配(比方两个都是双引号大概都是单引号):
/["][^"]*["]/
假如请求入手下手和停止的引号婚配,我们可使用以下的援用:
/(["])[^"]*1/
1婚配的是第一个代括号的子表达式所婚配的形式.在这个例子中,它实行了一种规约,那就是入手下手的引号必需和停止的引号相婚配.注重,假如反斜杠后跟从的数字比
代括号的子表达式数多,那末它就会被剖析为一个十进制的本义序列,而不是一个援用.你能够保持利用完全的三个字符来暗示本义序列,这们就能够制止搅浑了.比方,
利用 44,而不是44.上面是正则表达式的选择、分组和援用字符:
字符寄义
____________________________________________________________________
|选择.婚配的要末是该标记右边的子表达式,要末它右侧的子表达式
(...)分组.将几个项目分为一个单位.这个单位可由*、+、?和|等标记利用,并且还能够记着和这个组婚配的字符以供今后引
用利用
和第n个分组所婚配的字符相婚配.分组是括号中的子表达式(多是嵌套的).分组号是从左到右计数的左括号数
____________________________________________________________________
5.指定婚配的地位
我们已看到了,一个正则表达式中的很多元素才干够婚配字符串的一个字符.比方:s婚配的只是一个空缺符.另有一些正则表达式的元素婚配的是字符之间宽度为
0的空间,而不是实践的字符比方:婚配的是一个词语的界限,也就是处于一个/w字字符和一个w非字字符之间的界限.像如许的字符其实不指定任何一个婚配了的
字符串中的字符,它们指定的是婚配所产生的正当地位.偶然我们称这些元素为正则表达式的锚.由于它们将形式定位在检索字符串中的一个特定地位.最经常使用的锚元
素是^,它使形式依附于字符串的开首,而锚元素$则使形式定位在字符串的开端.
比方:要婚配词"javascript",我们可使用正则表达式/^javascript$/.假如我们想检索"java"这个词本身(不像在"javascript"中那样作为前缀),那末我们可使
用形式/sjavas/,它请求在词语java之前和以后都有空格.可是如许作有两个成绩.第一:假如"java"呈现在一个字符的开首大概是开头.该形式就不会与之婚配,除
非在开首和开头处有一个空格.第二:当这个形式找到一个与之婚配的字符时,它前往的婚配的字符串前端和后端都有空格,这并非我们想要的.因而,我们利用词语
的界限来取代真实的空格符s举行婚配.了局表达式是/java/.
上面是正则表达式的锚字符:
字符寄义
____________________________________________________________________
^婚配的是字符的开首,在多行检索中,婚配的是一行的开首
$婚配的是字符的开头,在多行检索中,婚配的是一行的开头
婚配的是一个词语的界限.简而言之就是位于字符w和w之间的地位(注重:[]婚配的是退格符)
B婚配的长短词语的界限的字符
_____________________________________________________________________
6.属性
有关正则表达式的语法另有最初一个元素,那就是正则表达式的属性,它申明的是初级形式婚配的划定规矩.和别的正则表达式语法分歧,属性是在/标记以外申明的.即它
们不呈现在两个斜杠之间,而是位于第二个斜杠以后.javascript1.2撑持两个属性.属性i申明形式婚配应当是巨细写不敏感的.属性g申明形式婚配应当是全局的.也
就是说,应当找出被检索的字符串中一切的婚配.这两种属性团结起来就能够实行一个全局的,巨细写不敏感的婚配.
比方:要实行一个巨细不敏感的检索以找到词语"java"(大概是"java"、"JAVA"等)的第一个详细值,我们可使用巨细不敏感的正则表达式/java/i.假如要在
一个字符串中找到"java"一切的详细值,我们还能够增加属性g,即/java/gi.
以下是正则表达式的属性:
字符寄义
_________________________________________
i实行巨细写不敏感的婚配
g实行一个全局的婚配,简而言之,就是找到一切的婚配,而不是在找到第一个以后就中断了
_________________________________________
除属性g和i以外,正则表达式就没有别的像属性一样的特征了.假如将机关函数RegExp的静态属性multiline设置为true,那末形式婚配将以多行的形式举行.在这
种形式下,锚字符^和$婚配的不但是检索字符串的开首和开头,还婚配检索字符串外部的一行的开首和开头.比方:形式/Java$/婚配的是"Java",可是其实不婚配
"Java
isfun".假如我们设置了multiline属性,那末后者也将被婚配:
RegExp.multiline=true;
先谈谈我对java的一些认识。我选择java,是因为他语法简单,功能强大,从web,到桌面,到嵌入式,无所不能。但当我进一步了解了java后,感叹,java原来也有许多缺点。 |
|