改善JavaScript程序的188个建议(41-50).doc

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
改善JavaScript程序的188个建议(41-50)

建议41:正确使用正则表达式引用 正则表达式在执行匹配运算时会自动把每个分组(子表达式)匹配的文本都存储在一个特殊的地方以备将来使用。这些存储在分组中的特殊值被称为反向引用。反向引用将遵循从左到右的顺序,根据表达式中左括号字符的顺序进行创建和编号。 var s = abcdefghijklmn; var r = /(a(b(c)))/; var a = s.match(r); ?//[abc, abc , bc , c] 在这个分组匹配模式中,共产生了3个反向引用,第一个是“(a(b(c)))”,第二个是“(b(c))”,第三个是“(c)”。它们引用的匹配文本分别是字符串“abc”、“bc”和“c”。 反向引用在应用开发中主要有以下几种常规用法。 1)在正则表达式对象的test()方法,以及字符串对象的match()和search()等方法中使用。在这些方法中,反向引用的值可以从RegExp()构造函数中获得。例如: var s = abcdefghijklmn; var r = /(\w)(\w)(\w)/; r.test(s); alert(RegExp.$1); ??//第1个子表达式匹配的字符a alert(RegExp.$2); ??//第2个子表达式匹配的字符b alert(RegExp.$3); ??//第3个子表达式匹配的字符c 在正则表达式执行匹配测试后,所有子表达式匹配的文本都被分组存储在RegExp()构造函数的属性内,通过前缀符号$与正则表达式中子表达式的编号来引用这些临时属性,其中属性$1标识符指向第一个值引用,属性$2标识符指向第二个值引用,依此类推。 2)可以直接在定义分组的表达式中包含反向引用。这可以通过使用特殊转义序列(如\l、\2等)来实现。例如: var s = abcbcacba; var r = /(\w)(\w)(\w)\2\3\1\3\2\1/; var b = r.test(s); ?// 验证正则表达式是否匹配该字符串 alert(b); ???//true 在上面的正则表达式中,“\1”表示对第一个反向引用(\w)所匹配的字符a的引用,“\2”表示对第二个反向引用(\w)所匹配的字符b的引用,“\3”表示对第二个反向引用(\w)所匹配的字符c的引用。 3)可以在字符串对象的replace()方法中使用。通过使用特殊字符序列$1、$2、$3等来实现。例如,在下面的示例中将颠倒相邻字母和数字的位置。 var s = aa11bb22c3d4e5f6; var r = /(\w+?)(\d+)/g; var b = s.replace(r,$2$1); alert(b); ???//11aa22bb3c 4d5e6f 在这个示例中,正则表达式包括两个分组,第一个分组匹配任意连续的字母,第二个分组匹配任意连续的数字。在replace()方法的第二个参数中,$1表示对正则表达式中第一个子表达式匹配文本的引用,而$2表示对正则表达式中第二个子表达式匹配文本的引用,通过颠倒$1和$2标识符的位置即可实现字符串的颠倒以替换原字符串。 建议42:用好正则表达式静态值 正则表达式的静态属性比较特殊,有两个名字:长名(全称)和短名(简称,以美元符号开头表示),详细说明见表2.1。 表2.1 RegExp的静态属性 长名?短名?说明 input?$_?最后用于匹配的字符串,即传递给exec()或test()方法的字符串 lastMatch?$?最后匹配的字符 lastParen?$+?最后匹配的分组 leftContext?$`?在上次匹配之前的子字符串 multiline?$*?用于指定是否所有表达式都使用多行模式的布尔值 rightContext?$?在上次匹配之后的子字符串 在下面的这个示例中借助正则表达式的静态属性,匹配字符串“Javascript”,不区分大小写: var s = Javascript,not Javascript; var r = /(Java)Script/gi; var a = r.exec(s); alert(RegExp.input); ?//Javascript,not Javascript alert(RegExp.leftContext); ?//空字符串,因为在第一次匹配操作时,左侧没有内容 alert(RegExp.rightContext); ?//,not Javascript alert(RegExp.lastMatch); ?//Javascript alert(RegExp.lastParen); ?//Java 上面示例演示了正则表达式的几个静态属性的用法。 input属性实际上存储的是被执行匹配的字符串,即整个字符串“Javascript

文档评论(0)

kaiss + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档