公元二零零九年三月

月禅 发表于 2009-03-15 21:37:44

没有想到,去年的三月我说我回来了,然后又消失了~~,今年的三月我又回来了~~,好像每年我都要回来一次~~。一切又都回到了原点。但愿一切都会好!

霸王别姬——张爱玲

月禅 发表于 2008-03-23 21:34:52

夜风丝溜溜地吹过,把帐篷顶上的帅字旗吹得豁喇喇乱卷。在帐篷里,一支红蜡烛,烛

油淋淋漓漓地淌下来,淌满了古铜高柄烛台的浮雕的碟子。在淡青色的火焰中,一股一股乳

白色的含着稀薄的呛人的臭味的烟袅袅上升。项羽,那驰名天下的江东叛军领袖,巍然地跽

在虎皮毯上,腰略向前俯,用左肘撑着膝盖,右手握着一块蘸了漆的木片,在一方素帛上沙

沙地画着。他有一张粗线条的脸庞,皮肤微黑,阔大,坚毅的方下巴。那高傲的薄薄的嘴唇

紧紧抿着,从嘴角的微涡起,两条疲倦的皱纹深深地切过两腮,一直延长到下颔。他那黝黑

的眼睛,虽然轻轻蒙上了一层忧郁的纱,但当他抬起脸来的时候,那乌黑的大眼睛里却跳出

了只有孩子的天真的眼睛里才有的焰焰的火花。

  “米九石,玉蜀黍八袋,杂粮十袋。虞姬!”他转过脸向那静静地立在帷帐前拭抹着佩

剑上的血渍的虞姬,他眼睛里爆裂的火花照亮了她的正在帐帷的阴影中的脸。“是的,我们

还能够支持两天。我们那些江东子弟兵是顶聪明的。虽然垓下这贫瘠的小土堆没有丰富的食

料可寻,他们会网麻雀,也会掘起地下的蚯蚓。让我看——从垓下到渭州大约要一天,从渭

州到颍城,如果换一匹新马的话,一天半也许可以赶到了。两天半……虞姬,三天之后,我

们江东的屯兵会来解围的。”

  “一定,一定会来解围的。”虞姬用团扇轻轻赶散了蜡烛上的青烟。“大王,我们只有

一千人,他们却有十万……”

  “啊,他们号称十万,然而今天经我们痛痛快快一阵大杀,据我估计,决不会超过七万

五的数目了。”他伸了个懒腰。“今天这一阵厮杀,无论如何,总挫了他们一点锐气。我猜

他们这两天不敢冲上来挑战了。——哦,想起来了,你吩咐过军曹预备滚木和擂石了没

有?”

“大王倦了,先休息一会吧,一切已经照您所嘱咐的做去了。”她依照着每晚固定的工

作做去。侍候他睡了之后,就披上一件斗篷,一只手拿了烛台,另一只手护住了烛光,悄悄

地出了帐篷。夜是静静的,在迷□的薄雾中,小小的淡白色的篷帐缀遍了这土坡,在帐子缝

里漏出一点一点的火光,正像夏夜里遍山开满的红心白瓣的野豆花一般。战马呜呜悲啸的声

音卷在风里远远传过来,守夜人一下一下敲着更,绕着营盘用单调的步伐走着。虞姬裹紧了

斗篷,把宽大的袖口遮住了那一点烛光,防它被风吹灭了。在黑暗中,守兵的长矛闪闪地发

出微光。马粪的气味,血腥,干草香,静静地在清澄的夜的空气中飘荡。

她停在一座营帐前,细听里面的声音。

两个兵士赌骰子,用他们明天的军粮打赌,一个梦呓的老军呢喃地描画他家乡的香稻米

的滋味。

虞姬轻轻地离开了他们。

她第二次停住的地方是在前线的木栅栏前面。杂乱地,斜坡上堆满了砍下来的树根,木

椿,沙袋,石块,粘土。哨兵擎着蛇矛来往踱着,红灯笼在残破的雉堞的缺口里摇晃着,把

半边天都染上一层淡淡的红光。她小心地吹熄了蜡烛,把手弯支在木栅栏上,向山下望过

去;那一点一点密密猛猛的火光,闪闪烁烁,多得如同夏天草窝里的萤火虫——那就是汉王

与他所招集的四方诸侯的十万雄兵云屯雨集的大营。

  虞姬托着腮凝想着。冷冷的风迎面吹来,把她肩上的飘带吹得瑟瑟乱颤。她突然觉得

冷,又觉得空虚,正像每一次她离开了项王的感觉一样。如果他是那炽热的,充满了烨烨的

光彩,喷出耀眼欲花的ambition的火焰的太阳,她便是那承受着,反射着他的光和

力的月亮。她像影子一般地跟随他,经过漆黑的暴风雨之夜,经过战场上非人的恐怖,也经

过饥饿,疲劳,颠沛,永远的。当那叛军的领袖骑着天下闻名的乌骓马一阵暴风似地驰过的

时候,江东的八千子弟总能够看到后面跟随着虞姬,那苍白,微笑的女人,紧紧控着马缰

绳,淡绯色的织锦斗篷在风中鼓荡。十余年来,她以他的壮志为她的壮志,她以他的胜利为

她的胜利,他的痛苦为她的痛苦。然而,每逢他睡了,她独自掌了蜡烛出来巡营的时候,她

开始想起她个人的事来了。她怀疑她这样生存在世界上的目标究竟是什么。他活着,为了他

的壮志而活着。他知道怎样运用他的佩刀,他的长矛,和他的江东子弟去获得他的皇冕。然

而她呢?她仅仅是他的高吭的英雄的呼啸的一个微弱的回声,渐渐轻下去,轻下去,终于死

寂了。如果他的壮志成功的话——

远远地,在山下汉军的营盘里一个哨兵低低地吹起画角来,那幽幽的,凄楚的角声,单

调、笨拙,然而却充满了沙场上的哀愁的角声,在澄静的夜空底下回荡着。天上的一颗大星

渐渐地暗了下去。她觉得一颗滚热的泪珠落在她自己的手背上。——啊,假如他成功了的

话,她得到些什么呢?她将得到一个“贵人”的封号,她将得到一个终身监禁的处分。她将

穿上宫妆,整日关在昭华殿的阴沉古黯的房子里,领略窗子外面的月色,花香,和窗子里面

的寂寞。她要老了,于是他厌倦了她,于是其他的数不清的灿烂的流星飞进他和她享有的天

宇,隔绝了她十余年来沐浴着的阳光。她不再反射他照在她身上的光辉,她成了一个被蚀的

明月,阴暗、忧愁、郁结,发狂。当她结束了她这为了他而活着的生命的时候,他们会送给

她一个“端淑贵妃”或“贤穆贵妃”的谥号,一只锦绣装裹的沉香木棺椁,和三四个殉葬的

奴隶。这就是她的生命的冠冕。她又厌恶又惧怕她自己的思想。

  “不,不,我今晚想得太多了!捺住它,快些捺住我的思潮!”她低下了头,握住拳

头,指甲深深地掐到肉里去,她那小小的,尖下颏的脸发青而且微颤像风中的杏叶。“回去

吧!只要看一看他的熟睡的脸,也许我就不会再胡思乱想了。”

  她拿起蜡烛台,招呼近旁的哨兵过来用他的灯笼点亮了她的蜡烛。正当她兜紧了风帔和

斗篷预备转身的时候,她突然停住了。从山脚下的敌兵的营垒里传出低低的,幽闲的,懒洋

洋的唱小调的歌声。很远,很远,咬字也不大清晰,然而,风正朝山上吹,听得清清楚楚的

楚国乡村中流行的民歌《罗敷姐》。先是只有一只颤抖的,孤零的喉咙在唱,但,也许是士

兵的怀乡症被淡淡的月色勾了上来了吧,四面的营盘里都合唱起来了。《罗敷姐》唱完了,

一阵低低的喧笑,接着又唱起《哭长城》来。虞姬木然站着,她先是略略有些惶惑。

  “他们常唱这个么?”她问那替她燃蜡烛的哨兵。

“是的,”那老兵在灯笼底下霎了霎眼,微微笑着。“我们都有些不信那班北方汉子有

这般好的喉咙哩。”

虞姬不说话,手里的烛台索索地乱颤。扑地一声,灯笼和蜡烛都被风吹熄了。在昏暗

中,她的一双黑眼珠直瞪瞪向前望着,像猫眼石一般地微微放光,她看到了这可怖的事实。

等那哨兵再给她点亮了蜡烛的时候,她匆匆地回到有着帅字旗的帐篷里去。她高举着蜡

烛站在项王的榻前。他睡得很熟,身体微微蜷着,手塞在枕头底下,紧紧抓着一把金缕小

刀。他是那种永远年轻的人们中的一个;虽然他那纷披在额前的乱发已经有几茎灰白色的,

并且光阴的利刃已经在他坚凝的前额上划了几条深深的皱痕,他的睡熟的脸依旧含着一个婴

孩的坦白和固执。他的粗眉毛微微皱着,鼻子带着倔强的神气,高贵的嘴唇略微下垂,仿佛

是为了发命令而生的。

虞姬看着他——不,不,她不能叫醒他告诉他悲惨的一切。他现在至少是愉快的;他在

梦到援兵的来临,也许他还梦见内外夹攻把刘邦的大队杀得四散崩溃,也许他还梦见自己重

新做了诸侯的领袖,梦见跨了乌骓整队进了咸阳,那不太残酷了么,假如他突然明白过来援

军是永远不会来了?

虞姬脸上凝结了一颗一颗大汗珠。她瞥见了布篷上悬挂着的那把佩剑——如果——如果

他在梦到未来的光荣的时候忽然停止了呼吸——譬如说,那把宝剑忽然从篷顶上跌下来刺进

了他的胸膛——她被她自己的思想骇住了。汗珠顺着她的美丽的青白色的面颊向下流。红烛

的火光缩得只有蚕豆小。项王在床上翻了个身。“大王,大王……”她听见她自己沙哑的声

音在叫。

项王骨碌一声坐了起来,霍地一下把小刀拔出鞘来。

“怎么了,虞姬?有人来劫营了么?”

  “没有,没有。可是有比这个更可怕的。大王,你听。”

他们立在帐篷的门边。《罗敷姐》已经成了尾声,然而合唱的兵士更多了,那悲哀的,

简单的节拍从四面山脚下悠悠扬扬地传过来。“是江东的俘虏在怀念着家乡?”在一阵沉默

之后,项王说。“大王,这歌声是从四面传来的。”

“啊,汉军中的楚人这样——这样多么?”

在一阵死一般的沉寂里,只有远远的几声马嘶。

  “难道——难道刘邦已经尽得楚地了?”

  虞姬的心在绞痛,当她看见项王倔强的嘴唇转成了白色,他的眼珠发出冷冷的玻璃一样

的光辉,那双眼睛向前瞪着的神气是那样的可怕,使她忍不住用她宽大的袖子去掩住它。她

能够觉得他的睫毛在她的掌心急促地翼翼扇动,她又觉得一串冰凉的泪珠从她手里一直滚到

她的臂弯里,这是她第一次知道那英雄的叛徒也是会流泪的动物。

“可怜的……可怜的……”底下的话听不出了,她的苍白的嘴唇轻轻翕动着。他甩掉她

的手,拖着沉重的脚步,歪歪斜斜走回帐篷里。她跟了进来,看见他伛偻着腰坐在榻上,双

手捧着头。蜡烛只点剩了拇指长的一截。残晓的清光已经透进了帷幔。“给我点酒。”他抬

起眼来说。当他提着满泛了琥珀的流光的酒盏在手里的时候,他把手撑在膝盖上,微笑地看

着她。

  “虞姬,我们完了。我早就有些怀疑,为什么江东没有运粮到垓下来。过去的事多说也

无益。我们现在只有一件事可做——冲出去。看这情形,我们是注定了要做被包围的困兽

了,可是我们不要做被猎的,我们要做猎人。明天——啊,不,今天——今天是我最后一次

的行猎了。我要冲出一条血路,从汉军的军盔上面踏过去!哼,那刘邦,他以为我已经被他

关进笼子里了吗?我至少还有一次畅快的围猎的机会,也许我的猎枪会刺穿他的心,像我刺

穿一只贵重的紫貂一样。虞姬,披上你的波斯软甲,你得跟随我,直到最后一分钟。我们都

要死在马背上。”“大王,我想你是懂得我的,”虞姬低着头,用手理着项王枕边的小刀的

流苏。“这是你最后一次上战场,我愿意您充分地发挥你的神威,充分地享受屠杀的快乐。

我不会跟在您的背后,让您分心,顾虑我,保护我,使得江东的子弟兵讪笑您为了一个女人

失去了战斗的能力。”

“噢,那你就留在后方,让汉军的士兵发现你,去把你献给刘邦吧!”虞姬微笑。她很

迅速地把小刀抽出了鞘,只一刺,就深深地刺进了她的胸膛。项羽冲过去托住她的腰,她的

手还紧紧抓着那镶金的刀柄,项羽俯下他的含泪的火一般光明的大眼睛紧紧瞅着她。她张开

她的眼,然后,仿佛受不住这样强烈的阳光似的,她又合上了它们。项羽把耳朵凑到她的颤

动的唇边,他听见她在说一句他所不懂的话:“我比较喜欢那样的收梢。”

  等她的身体渐渐冷了之后,项王把她胸脯上的刀拔了出来,在他的军衣上揩抹掉血渍。

然后,咬着牙,用一种沙嗄的野猪的吼声似的声音,他喊叫:“军曹,吹起画角!吩咐备

马,我们要冲下山去!”



关键词(Tag): 霸王别姬

javascript 字体放大放小

月禅 发表于 2008-03-12 15:03:09

因为页面需要完成功能:将一段文本字体放大或缩小。最早的版本,只能控制没有设置字体样式的文本,如:<div>aaaaa</div>
如果div中的文本没有被设定样式,那么就可以将它自由的放大缩小,但如果加了样式那么我的功能就失效了,如:<div style='font-size:13px'>aaaa </div>
 为了解决这个问题,所以写了新的方法:
 

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<style>
 .myclass
 {
    font-size:10px;
 }
</style>
<script type="text/javascript">
 var size=12;
function fnZoom(S)
{
 
 var obj=document.getElementById("zoom");
    var allEle=obj.innerHTML;
 if(S=='+'){size = new Number(size)+2;}
 else{
  
  size=size-2;
  }
  //替换px
 var reg=new RegExp("(\d+)px","gi");
 var AryObj = new Array();
 
 
 if (size>=16) {size=16}
 if (size<=8) {size=8}
 var newstr=allEle.replace(reg,size+"px");
 
 
 //替换Class
 var regClass=new RegExp("class=(\w*)","gi");
 if (size>=20) {size=20}
 if (size<=8) {size=8}
 var finllayNewstr=newstr.replace(regClass,"style='font-size:"+size+"px'");
 

    //无控制标签
 finllayNewstr="<span style='font-size:"+size+"px'>"+finllayNewstr+"</span>";
 obj.innerHTML=finllayNewstr ;
 
   
  
}
</script>
</head>
  
<body>
<a href="javascript:fnZoom('+')">变大</a>>>>>> <a href="javascript:fnZoom('-')">变小</a>
  <div  id="zoom">
     <span class="myclass"> aaaaa </span>
    <span style="font-size:12px"> bbbb </span>
    <span> ccc</span>
  <table> <tr><td class="myclass"> 你好</td></tr>
  </table>
  </div>
</body>
</html>

关键词(Tag): 字体 javascript 放大

JavaScript中的正则表达式解析

月禅 发表于 2008-03-12 14:30:44

正则表达式是一个描述字符模式的对象。

  JavaScript的RegExp对象和String对象定义了使用正则表达式来执行强大的模式匹配和文本检索与替换函数的方法.

  在JavaScript中,正则表达式是由一个RegExp对象表示的.当然,可以使用一个RegExp()构造函数来创建RegExp对象,也可以用JavaScript 1.2中的新添加的一个特殊语法来创建RegExp对象.就像字符串直接量被定义为包含在引号内的字符一样,正则表达式直接量也被定义为包含在一对斜杠(/)之间的字符.所以,JavaScript可能会包含如下的代码:

var pattern = /s$/;

  这行代码创建一个新的RegExp对象,并将它赋给变量parttern.这个特殊的RegExp对象和所有以字母"s"结尾的字符串都匹配.用RegExp()也可以定义一个等价的正则表达式,代码如下:

var pattern = new RegExp("s$");

  无论是用正则表达式直接量还是用构造函数RegExp(),创建一个RegExp对象都是比较容易的.较为困难的任务是用正则表达式语法来描述字符的模式.JavaScript采用的是Perl语言正则表达式语法的一个相当完整的子集.

  正则表达式的模式规范是由一系列字符构成的.大多数字符(包括所有字母数字字符)描述的都是按照字面意思进行匹配的字符.这样说来,正则表达式/java/就和所有包含子串 "java" 的字符串相匹配.虽然正则表达式中的其它字符不是按照字面意思进行匹配的,但它们都具有特殊的意义.正则表达式 /s$/ 包含两个字符.

  第一个特殊字符 "s" 是按照字面意思与自身相匹配.第二个字符 "$" 是一个特殊字符,它所匹配的是字符串的结尾.所以正则表达式 /s$/ 匹配的就是以字母 "s" 结尾
的字符串.

  1.直接量字符

  我们已经发现了,在正则表达式中所有的字母字符和数字都是按照字面意思与自身相匹配的.JavaScript的正则表达式还通过以反斜杠(\)开头的转义序列支持某些非

  字母字符.例如,序列 "\n" 在字符串中匹配的是一个直接量换行符.在正则表达式中,许多标点符号都有特殊的含义.下面是这些字符和它们的含义:

  正则表达式的直接量字符

字符 匹配
________________________________
字母数字字符 自身
\ f 换页符
\ n 换行符
\ r 回车
\ t 制表符
\ v 垂直制表符
\ / 一个 / 直接量
\ \ 一个 \ 直接量
\ . 一个 . 直接量
\ * 一个 * 直接量
\ + 一个 + 直接量
\ ? 一个 ? 直接量
\ | 一个 | 直接量
\ ( 一个 ( 直接量
\ ) 一个 ) 直接量
\ [ 一个 [ 直接量
\ ] 一个 ] 直接量
\ { 一个 { 直接量
\ } 一个 } 直接量
\ XXX 由十进制数 XXX 指 定的ASCII码字符
\ Xnn 由十六进制数 nn 指定的ASCII码字符
\ cX 控制字符^X. 例如, \cI等价于 \t, \cJ等价于 \n

___________________________________________________

如果想在正则表达式中使用特殊的标点符号,必须在它们之前加上一个 "\" .

  2.字符类

  将单独的直接符放进中括号内就可以组合成字符类.一个字符类和它所包含的任何一个字符都匹配,所以正则表达式 / [abc] / 和字母 "a" , "b" , "c" 中的任何一个都匹配.另外还可以定义否定字符类,这些类匹配的是除那些包含在中括号之内的字符外的所有字符.定义否定字符尖时,要将一个 ^ 符号作为从左中括号算起的第一个字符.正则表达式的集合是 / [a-zA-z0-9] / .

  由于某些字符类非常常用,所以JavaScript的正则表达式语法包含一些特殊字符和转义序列来表示这些常用的类.例如, \s 匹配的是空格符,制表符和其它空白符, \s匹配的则是空白符之外的任何字符.

  正则表灰式的字符类

字符 匹配
____________________________________________________
[...] 位于括号之内的任意字符
[^...] 不在括号之中的任意字符
. 除了换行符之外的任意字符,等价于[^\n]
\w 任何单字字符, 等价于[a-zA-Z0-9]
\W 任何非单字字符,等价于[^a-zA-Z0-9]
\s 任何空白符,等价于[\ t \ n \ r \ f \ v]
\S 任何非空白符,等价于[^\ t \ n \ r \ f \ v]
\d 任何数字,等价于[0-9]
\D 除了数字之外的任何字符,等价于[^0-9]
[\b] 一个退格直接量(特例)
________________________________________________________________

  3.复制

  用以上的正则表式的语法,可以把两位数描述成 / \ d \ d /,把四位数描述成 / \d \ d \ d \ d /.但我们还没有一种方法可以用来描述具有任意多数位的数字或者是一个

  字符串.这个串由三个字符以及跟随在字母之后的一位数字构成.这些复杂的模式使用的正则表达式语法指定了该表达式中每个元素要重复出现的次数.

  指定复制的字符总是出现在它们所作用的模式后面.由于某种复制类型相当常用.所以有一些特殊的字符专门用于表示它们.例如: +号匹配的就是复制前一模式一次或多次的模式.下面的表列出了复制语法.先看一个例子:

/\d{2, 4}/ //匹配2到4间的数字.

/\w{3} \d?/ //匹配三个单字字符和一个任意的数字.

/\s+java\s+/ //匹配字符串"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+)/) ,我们就可以从所检索到的任何匹配中抽取数字了,之后我们会对此进行解析的.

  代括号的子表达式的另一个用途是,允许我们在同一正则表达式的后面引用前面的子表达式.这是通过在字符串 \ 后加一位或多位数字来实现的.数字指的是代括号的子表达式在正则表达式中的位置.例如: 引用的是第一个代括号的子表达式. 引用的是第三个代括号的子表达式.注意,由于子表达式可以嵌套在其它子表达式中,所以它的位置是被计数的左括号的位置.

  例如:在下面的正则表达式被指定为 :
/([Jj]ava([Ss]cript)) \sis \s (fun\w*) /


  对正则表达式中前一子表达式的引用所指定的并不是那个子表达式的模式,而是与那个模式相匹配的文本.这样,引用就不只是帮助你输入正则表达式的重复部分的快捷方式了,它还实施了一条规约,那就是一个字符串各个分离的部分包含的是完全相同的字符.例如:下面的正则表达式匹配的就是位于单引号或双引号之内的所有字符.但是,它要求开始和结束的引号匹配(例如两个都是双引号或者都是单引号):

/[' "] [^ ' "]*[' "]/


  如果要求开始和结束的引号匹配,我们可以使用如下的引用:

/( [' "] ) [^ ' "] * /

  匹配的是第一个代括号的子表达式所匹配的模式.在这个例子中,它实施了一种规约,那就是开始的引号必须和结束的引号相匹配.注意,如果反斜杠后跟随的数字比代括号的子表达式数多,那么它就会被解析为一个十进制的转义序列,而不是一个引用.你可以坚持使用完整的三个字符来表示转义序列,这们就可以避免混淆了.例如,使用 4,而不是.下面是正则表达式的选择、分组和引用字符:

字符 含义
______________________________________
| 选择.匹配的要么是该符号左边的子表达式,要么它右边的子表达式
(...) 分组.将几个项目分为一个单元.这个单元可由 *、+、?和|等符号使用,而且还可以记住和这个组匹配的字符以供此后引用使用
\n 和第n个分组所匹配的字符相匹配.分组是括号中的子表达式(可能是嵌套的).分组号是从左到右计数的左括号数
______________________________________

  5.指定匹配的位置

  我们已经看到了,一个正则表达式中的许多元素才能够匹配字符串的一个字符.例如: \s 匹配的只是一个空白符.还有一些正则表达式的元素匹配的是字符之间宽度为0的空间,而不是实际的字符例如: \b 匹配的是一个词语的边界,也就是处于一个/w字字符和一个\w非字字符之间的边界.像\b 这样的字符并不指定任何一个匹配了的字符串中的字符,它们指定的是匹配所发生的合法位置.有时我们称这些元素为正则表达式的锚.因为它们将模式定位在检索字符串中的一个特定位置.最常用的锚元素是 ^, 它使模式依赖于字符串的开头,而锚元素$则使模式定位在字符串的末尾.

  例如:要匹配词 "javascript" ,我们可以使用正则表达式 /^ javascript $/. 如果我们想检索 "java" 这个词自身 (不像在 "javascript" 中那样作为前缀),那么我们可以使用模式 /\s java \s /, 它要求在词语java之前和之后都有空格.但是这样作有两个问题.第一: 如果 "java" 出现在一个字符的开头或者是结尾.该模式就不会与之匹配,除非在开头和结尾处有一个空格. 第二: 当这个模式找到一个与之匹配的字符时,它返回的匹配的字符串前端和后端都有空格,这并不是我们想要的.因此,我们使用词语的边界 \b 来代替真正的空格符 \s 进行匹配. 结果表达式是 /\b java \b/.

下面是正则表达式的锚字符:


字符 含义
____________________________________________________________________
^ 匹配的是字符的开头,在多行检索中,匹配的是一行的开头
$ 匹配的是字符的结尾,在多行检索中,匹配的是一行的结尾
\b 匹配的是一个词语的边界.简而言之就是位于字符\w 和 \w之间的位置(注意:[\b]匹配的是退格符)
\B 匹配的是非词语的边界的字符
_____________________________________________________________________

  6.属性

  有关正则表达式的语法还有最后一个元素,那就是正则表达式的属性,它说明的是高级模式匹配的规则.和其它正则表达式语法不同,属性是在 / 符号之外说明的.即它们不出现在两个斜杠之间,而是位于第二个斜杠之后.javascript 1.2支持两个属性.属性 i 说明模式匹配应该是大小写不敏感的.属性 g 说明模式匹配应该是全局的.也就是说,应该找出被检索的字符串中所有的匹配.这两种属性联合起来就可以执行一个全局的,大小写不敏感的匹配.

  例如: 要执行一个大小不敏感的检索以找到词语 "java" (或者是 "java" 、"JAVA"等) 的第一个具体值,我们可以使用大小不敏感的正则表达式 /\b java\b/i .如果要在一个字符串中找到 "java" 所有的具体值,我们还可以添加属性 g, 即 /\b java \b/gi .

以下是正则表达式的属性:


字符 含义
_________________________________________
i 执行大小写不敏感的匹配
g 执行一个全局的匹配,简而言之,就是找到所有的匹配,而不是在找到第一个之后就停止了
_________________________________________

  除属性 g 和 i 之外,正则表达式就没有其它像属性一样的特性了.如果将构造函数 RegExp 的静态属性 multiline 设置为 true ,那么模式匹配将以多行的模式进行.在这种模式下,锚字符 ^ 和 $ 匹配的不只是检索字符串的开头和结尾,还匹配检索字符串内部的一行的开头和结尾.例如: 模式 /Java$/ 匹配的是 "Java",但是并不匹配"Java\nis fun" .如果我们设置了 multiline 属性,那么后者也将被匹配:

RegExp.multiline = true;

  正则表达式(regular expression)对象包含一个正则表达式模式(pattern)。它具有用正则表达式模式去匹配或代替一个串(string)中特定字符(或字符集合)的属性(properties)和方法(methods)。要为一个单独的正则表达式添加属性,可以使用正则表达式构造函数(constructor function),无论何时被调用的预设置的正则表达式拥有静态的属性(the predefined RegExp object has static properties that are set whenever any regular expression is used, 我不知道我翻得对不对,将原文列出,请自行翻译)。

  • 创建:
    一个文本格式或正则表达式构造函数
    文本格式: /pattern/flags
    正则表达式构造函数: new RegExp("pattern"[,"flags"]);
  • 参数说明:
    pattern -- 一个正则表达式文本
    flags -- 如果存在,将是以下值:
    g: 全局匹配
    i: 忽略大小写
    gi: 以上组合

[注意] 文本格式的参数不用引号,而在用构造函数时的参数需要引号。如:/ab+c/i new RegExp("ab+c","i")是实现一样的功能。在构造函数中,一些特殊字符需要进行转意(在特殊字符前加"\")。如:re = new RegExp("\w+")

  正则表达式中的特殊字符

字符 含意
\

做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界。
-或-
对正则表达式功能字符的还原,如"*"匹配它前面元字符0次或多次,/a*/将匹配a,aa,aaa,加了"\"后,/a\*/将只匹配"a*"。

^ 匹配一个输入或一行的开头,/^a/匹配"an A",而不匹配"An a"
$ 匹配一个输入或一行的结尾,/a$/匹配"An a",而不匹配"an A"
* 匹配前面元字符0次或多次,/ba*/将匹配b,ba,baa,baaa
+ 匹配前面元字符1次或多次,/ba*/将匹配ba,baa,baaa
? 匹配前面元字符0次或1次,/ba*/将匹配b,ba
(x) 匹配x保存x在名为...的变量中
x|y 匹配x或y
{n} 精确匹配n次
{n,} 匹配n次以上
{n,m} 匹配n-m次
[xyz] 字符集(character set),匹配这个集合中的任一一个字符(或元字符)
[^xyz] 不匹配这个集合中的任何一个字符
[\b] 匹配一个退格符
\b 匹配一个单词的边界
\B 匹配一个单词的非边界
\cX 这儿,X是一个控制符,/\cM/匹配Ctrl-M
\d 匹配一个字数字符,/\d/ = /[0-9]/
\D 匹配一个非字数字符,/\D/ = /[^0-9]/
\n 匹配一个换行符
\r 匹配一个回车符
\s 匹配一个空白字符,包括\n,\r,\f,\t,\v等
\S 匹配一个非空白字符,等于/[^\n\f\r\t\v]/
\t 匹配一个制表符
\v 匹配一个重直制表符
\w 匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如[\w]匹配".98"中的5,等于[a-zA-Z0-9]
\W 匹配一个不可以组成单词的字符,如[\W]匹配".98"中的$,等于[^a-zA-Z0-9]。

  说了这么多了,我们来看一些正则表达式的实际应用的例子:

E-mail地址验证:
 function test_email(strEmail) {
  var myReg = /^[_a-z0-9]+@([_a-z0-9]+\.)+[a-z0-9]{2,3}$/;
  if(myReg.test(strEmail)) return true;
  return false;
 }
HTML代码的屏蔽
 function mask_HTMLCode(strInput) {
   var myReg = /<(\w+)>/;
   return strInput.replace(myReg, "&lt;&gt;");
 }

正则表达式对象的属性及方法
  预定义的正则表达式拥有有以下静态属性:input, multiline, lastMatch, lastParen, leftContext, rightContext和到。其中input和multiline可以预设置。其他属性的值在执行过exec或test方法后被根据不同条件赋以不同的值。许多属性同时拥有长和短(perl风格)的两个名字,并且,这两个名字指向同一个值。(JavaScript模拟perl的正则表达式)
正则表达式对象的属性
属性 含义
... 如果它(们)存在,是匹配到的子串
$_ 参见input
$* 参见multiline
$& 参见lastMatch
$+ 参见lastParen
$` 参见leftContext
$’          参见rightContext
constructor    创建一个对象的一个特殊的函数原型
global       是否在整个串中匹配(bool型)
ignoreCase     匹配时是否忽略大小写(bool型)
input        被匹配的串
lastIndex     最后一次匹配的索引
lastParen     最后一个括号括起来的子串
leftContext    最近一次匹配以左的子串
multiline     是否进行多行匹配(bool型)
prototype     允许附加属性给对象
rightContext    最近一次匹配以右的子串
source       正则表达式模式
lastIndex     最后一次匹配的索引

正则表达式对象的方法
方法 含义
compile      正则表达式比较
exec        执行查找
test        进行匹配
toSource      返回特定对象的定义(literal representing),其值可用来创建一个新的对象。重载Object.toSource方法得到的。
toString      返回特定对象的串。重载Object.toString方法得到的。
valueOf      返回特定对象的原始值。重载Object.valueOf方法得到
例子
<script language = "JavaScript">
var myReg = /(\w+)\s(\w+)/;
var str  = "John Smith";
var newstr = str.replace(myReg, ", ");
document.write(newstr);
</script>
将输出"Smith, John"
关键词(Tag): 正则表达式

[转]Server.Transfer 方法如何传递复杂的参数

月禅 发表于 2008-03-07 11:40:49

有些情况下,我们用 Sever.Transfer方法转到另一个页面, 有些复杂的参数,如XML串等参数可以采用Context.Item[]的方法进行传递

范例代码:

        Context.Items.Add(
"strFlowUsers", strRet);
        Context.Items.Add(
"strAttXml", strAttXml);
        Context.Items.Add(
"strOpinion", strOpinion);
        Context.Items.Add(
"strFormXMLValue", strFormXMLValue);

        Server.Transfer(
"../Forms/flow_Sender.aspx?MessageID=" + lngMessageID.ToString() + "&ActionID=" + strActionID, true);

获取参数范例:
strUsersXml = Context.Items["strFlowUsers"].ToString();
            strValues 
= Context.Items["strFormXMLValue"].ToString();
            strAttXml 
= Context.Items["strAttXml"].ToString();
            strOpinion 
= Context.Items["strOpinion"].ToString();
关键词(Tag): server.transfer