Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

JavaScript Regular Expressions

2,042 views

Published on

JavaScript Regular Expressions

Published in: Education
  • Be the first to comment

  • Be the first to like this

JavaScript Regular Expressions

  1. 1. Java Script 正则表达式 张军
  2. 2. 使用方法 <ul><li>创建对象 </li></ul><ul><li>var r = new RegExp(&quot; 表达式 &quot;); </li></ul><ul><li>直接量 </li></ul><ul><li>var r = / 表达式 /; </li></ul>
  3. 3. 修饰符 <ul><li>i 执行对大小写不敏感的匹配。 </li></ul><ul><li>g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。 </li></ul><ul><li>m 执行多行匹配。 </li></ul>var str = &quot;taobao UED&quot;; var test = /ued/i; // var test = new RegExp(&quot;ued&quot;, &quot;i&quot;); alert(str.match(test));
  4. 4. RegExp 属性 <ul><li>global RegExp 对象是否具有标志 g 。 </li></ul><ul><li>ignoreCase RegExp 对象是否具有标志 i 。 </li></ul><ul><li>lastIndex 一个整数,标示开始下一次匹配的字符位置。 </li></ul><ul><li>multiline RegExp 对象是否具有标志 m 。 </li></ul><ul><li>source 正则表达式的源文本。 </li></ul>
  5. 5. lastIndex <ul><li>var r = /d/g; </li></ul><ul><li>alert(r.test('abc1')); </li></ul><ul><li>alert(r.lastIndex); </li></ul><ul><li>alert(r.test('ab1')); </li></ul><ul><li>alert(r.lastIndex); </li></ul><ul><li>alert(r.test('a1')); </li></ul><ul><li>alert(r.lastIndex); </li></ul>//true //4 //false //0 //true //2 一个正则表达式实例多次 test 或 exec 时,它的 lastIndex 将每一次都被更改。 不具有标志 g 和不表示全局模式的 RegExp 对象不能使用 lastIndex 属性
  6. 6. 常用元字符 <ul><li>. 匹配除换行符以外的任意字符 </li></ul><ul><li>w 匹配字母或数字或下划线或汉字 </li></ul><ul><li>s 匹配任意的空白符 </li></ul><ul><li>d 匹配数字 </li></ul><ul><li>b 匹配单词的开始或结束 </li></ul><ul><li>^ 匹配字符串的开始 </li></ul><ul><li>$ 匹配字符串的结束 </li></ul>
  7. 7. RegExp 方法 <ul><li>compile 编译正则表达式。 </li></ul><ul><li>exec 检索字符串中指定的值。返回找到的值,并确定其位置。 </li></ul><ul><li>test 检索字符串中指定的值。返回 true 或 false 。 </li></ul>
  8. 8. Exec 的使用 <ul><li>var str = &quot;taobao UED, taobao mobile UED.&quot;; </li></ul><ul><li>var text = new RegExp(&quot;UED&quot;,&quot;g&quot;); </li></ul><ul><li>var result; </li></ul><ul><li>while ((result = text.exec(str)) != null) { </li></ul><ul><li>alert(result); </li></ul><ul><li>alert (text.lastIndex); </li></ul><ul><li>} </li></ul>//UED //10 //UED //29 exec() 返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null 。
  9. 9. 支 RegExp 的 String 对象的方法 <ul><li>search 检索与正则表达式相匹配的值。 </li></ul><ul><li>match 找到一个或多个正则表达式的匹配。 </li></ul><ul><li>replace 替换与正则表达式匹配的子串。 </li></ul><ul><li>split 把字符串分割为字符串数组。 </li></ul>
  10. 10. Match 的使用 <ul><li>检索一个字符串 </li></ul><ul><ul><li>var a = '20663:29447'; </li></ul></ul><ul><ul><li>var b = ':'; </li></ul></ul><ul><ul><li>if(a.match(b)){ </li></ul></ul><ul><ul><li>alert(true); </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><li>检索一个正则表达式的匹配 </li></ul><ul><ul><li>var a = '20663:29447:123123'; </li></ul></ul><ul><ul><li>if(a.match(/:+/g)){ </li></ul></ul><ul><ul><li>alert(true); </li></ul></ul><ul><ul><li>} </li></ul></ul>
  11. 11. 限定符 <ul><li>? 出现 0 次或 1 次 </li></ul><ul><li>* 出现 0 次或多次 </li></ul><ul><li>+ 出现 1 次或多次 </li></ul><ul><li>{n} 一定出现 n 次 </li></ul><ul><li>{n,m} 至少出现 n 次,最多出现 m 次 </li></ul><ul><li>{n,} 至少出现 n 次 </li></ul>
  12. 12. 如何 匹配元字符 ? <ul><li>使用转义符 “ ” </li></ul><ul><li>eg </li></ul><ul><ul><li>var str=&quot;c*&quot;; </li></ul></ul><ul><ul><li>var patt1=/c*/g; </li></ul></ul><ul><ul><li>document.write(str.match(patt1)); </li></ul></ul>
  13. 13. 控制文本框输入价格 <ul><li>$('#J_FilterPrice input').keyup(function(){ </li></ul><ul><li>var _val =$(this).val(); </li></ul><ul><li>if(!/^d+.?d*$/.test(_val)){ </li></ul><ul><li>_val = parseFloat(_val) </li></ul><ul><ul><ul><ul><li>$(this).val(isNaN(_val) ? '' : _val); </li></ul></ul></ul></ul><ul><li>} </li></ul><ul><li>}); </li></ul>
  14. 14. 贪婪与非贪婪限定符 <ul><li>贪婪 匹配: </li></ul><ul><li>? </li></ul><ul><li>* </li></ul><ul><li>+ </li></ul><ul><li>{n} </li></ul><ul><li>{n,m} </li></ul><ul><li>{n,} </li></ul><ul><li>非 贪婪 匹配: </li></ul><ul><li>?? </li></ul><ul><li>*? </li></ul><ul><li>+? </li></ul><ul><li>{n}? </li></ul><ul><li>{n,m}? </li></ul><ul><li>{n,}? </li></ul>
  15. 15. 贪婪与非贪婪的匹配过程 <ul><li>var s = 'http://www/hello/world.php'; </li></ul><ul><li>var r1 = /.*//g; </li></ul><ul><li>var r2 = /.*?//g; </li></ul><ul><li>alert(s.match(r1)); </li></ul><ul><li>alert(s.match(r2)); </li></ul>// 非贪婪匹配 从第一个字符开始匹配 如果失败,读入下一个字符继续 http:/, /, www/, hello/ // 贪婪匹配 匹配整个字符串 从后逐一舍去最后一个字符继续 http://www/hello/
  16. 16. Thank you !

×