JavaScript--正则表达式

1. 正则表达式
 是一个描述字符模式的对象.
 1.创建方式
  1) 正则表达式直接量
   var pattern = /s$/;
  2) RegExp()构造函数
   var pattern = new RegExp("s$");
 2. 直接量字符
  正则表达式中所有字母和数字都是按照字面含义进行匹配的。
     字符   匹配
  -----------------------
  字母和数字  自身
   \t   制表符
   \n   换行符 
   \v   垂直制表符
   \f   换页符
   \r   回车符
   \xnn  由十六进制数nn指定的拉丁字符  \x0A => \n
   \uxxxx  由十六进制xxxx指定的Unicode字符,例如 \u0009 => \t
   \cX   控制字符 ^X,例如 \cJ 等价于换页符 \n
 3. 字符类
  将直接量字符单独放在方括号内就组成了字符类。一个字符类可以匹配它所有包含的任意字符。
  [...]  方括号内的任意字符
  [^...]  不在方括号内的任意字符
 特殊字符类
  .   除换行符和其他Unicode行终止符之外的任意字符
  \w   任何ASCII字符,等价于[a-zA-Z0-9]
  \W   任何非ASCII字符组成的,等价于[^a-zA-Z0-9]
  \s   任何Unicode空白符:空格,制表符,回车
  \S   任何非Unicode空白符的字符
  \d   任何ASCII数字,等价于 [0-9]
  \D   任何非ASCII数字之外的任意字符,等价于 [^0-9]
  [\b]  退格直接量(特例)

4. 重复  一定要用在子表达式之后
  {n,m} 匹配前一项至少n次,但是不超过m次
  {n,} 匹配前一项n次或者更多次
  {n}  匹配前一项n次
  ?  匹配前一项0次或者1次,等价于{0,1}
  +  匹配前一项1次或者多次,等价于{1,}
  *  匹配前一项0次或者多次,等价于{0,}

例如:
   /[abc]/  匹配"a" "b" "c"中任意一个字符
   /[^abc]/ 匹配"a" "b" "c"之外的任意一个字符
   /\d{2,4}/ 匹配2~4个数字
   /\w{3}\d?/ 匹配三个字符或和一个可选的数字
   /\s+java\s+/ 匹配前后带有一个或多个空格的字符串"java"

5. 重复方式
  贪婪重复
   匹配重复字符时是尽可能多地匹配
  非贪婪重复 
   在待匹配的字符后跟随一个问号即可: ?? +? *? {1,5}?
  例如:
   /a+/ 可以匹配一个或者多个连续的字母a, 当使用"aaa"作为匹配字符串时正则表达式会匹配它的三个字符
   /a+?/ 可以匹配一个或者多个连续的字母a, 但是尽可能少地匹配。只能匹配第一个a
 6. 选择
  使用字符 "|" 分割供选择的字符。选择项的尝试匹配次序是从左到右,直到发现了匹配项,如果左边的选择项匹配,就忽略右边的匹配项,即使它产生更好的匹配。/ab|cd|ef/ 可以匹配 "ab"或者"cd"或者"ef"
 7. 分组
  "()"作用:
  1) 把单独的项组合成子表达式
   以便可以像处理一个单元那样用"|""*""+""?"对单元内的项进行处理
   /java(script)?/  可以匹配字符串java,后面的script可以有也可以没有
   /(ab|cd)+|ef/    可以匹配"ef",也可以匹配"ab""cd"一次或者多次
  2) 在完整的模式中定义子模式
   当一个正则表达式成功地和目标字符串相匹配时,可以从目标串中抽出和圆括号中的子模式相匹配的部分。
   /[a-z]+\d+/  一个或者多个小写字母后跟随一个或者多个数字
   (/[a-z]+(\d+)/) 可以抽出每个匹配末尾的数字
  3) 在同一正则表达式后面引用前面的子表达式。
   \1 引用第一个带圆括号的子表达式
   /([Jj]ava([Ss]cript)?)\sis\s(fun\w*)/    \2 引用 ([Ss]cript)
   对正则表达式中前一个子表达式的引用,并不是指对子表达式模式的引用,而是对与那个模式相匹配的文本的引用
    例如:
    /[‘"][^‘"]*[‘"]/ 匹配单引号或者双引号内的0个或者多个字符,但是它并不要求左侧和右侧的引号匹配
    /([‘"])[^‘"]*\1/ 匹配单引号或者双引号内的0个或者多个字符,但是它要求左侧和右侧的引号匹配

8. 指定匹配位置
  ^ 匹配字符串的开头,在多行检索中,匹配一行的开头
  $ 匹配字符串的结尾,在多行检索中,匹配一行的结尾
  \b 匹配一个单词的边界,即位于字符\w和\W之间的位置,或者位于字符\w和字符串的开头或结尾之间的位置。
  \B 匹配非单词边界的位置
  (?=p)  零宽正向先行断言,要求接下来的字符都与p匹配,但不能包括匹配p的那些字符
  (?!p)  零宽负向先行断言,要求接下来的字符不与p匹配
 9. 修饰符
  不是出现在两条斜线之间,而是出现在第二条斜线之后。
  new RegExp("","igm")
   i  说明匹配模式匹配是不区分大小写
   g  说明模式匹配应该是全局的
   m  用以在多行模式中执行匹配。
    /java$/im 可以匹配"java",也可以匹配"java\nis fun"
  
2. Javascript中 String对正则表达式的支持     
 1. search() 
  参数为一个正则表达式。如果参数不为正则表达式,则先通过RegExp将其转换为构造函数。不支持全局检索,返回第一个与之匹配的子串的位置,如果找不到匹配的子串,返回-1。
  "JavaScript".search(/script/i); //返回4
 2. replace()
  用以执行检索和替换操作。第一个参数是正则表达式,第二个参数是要替换的字符串。
  text.replace(/javascript/gi,"JavaScript"); //不区分大小写将所有javascript转换为JavaScript
 3. match()  
  最常用的正则表达式方法,参数为正则表达式。返回由匹配结果组成的数组。
  当正则表达式中没有g修饰符的时候,就不是全局匹配。这时,数组的第一个元素就为匹配的字符串,剩余的元素则是由正则表达式中用圆括号括起来的子表达式。如果该正则表达式设置为修饰符g,则该方法返回的数组包含字符串中所有匹配结果。
  "1 plus 2 equals 3".match(/\d+/g) //返回["1","2","3"]

var url = /(\w+):\/\/([\w.]+)\/(\S*)/;
  var text = "visit my blog at http://www.briup.com/~ee";
  var result = text.match(url);
  if(result!=null){
   var fullurl = result[0];
   var protocol = result[1];
   var host = result[2];
   var path = result[3];
  }
 4. split() 方法用于把一个字符串分割成字符串数组。

    语法:stringObject.split(separator(必需。字符串或正则表达式,从该参数指定的地方分割 stringObject。),howmany(可选))
      返回值为一个字符串数组    参数可以为正则表达式
      "1, 2, 3, 4, 5".split(/\s*,\s*/); //["1","2","3","4","5"] 允许分隔符左右两边留有空白

     "2:3:4:5".split(":") //将返回["2", "3", "4", "5"]
     "|a|b|c".split("|") //将返回["", "a", "b", "c"]

     "hello".split("") //可返回 ["h", "e", "l", "l", "o"]

     "hello".split("", 3) //返回一部分字符,请使用 howmany 参数 返回 ["h", "e", "l"]

3. Javascript中RegExp
 1. 构造函数
  第一个参数包括正则表达式的主体部分,即正则表达式直接量中两条斜线之间的文本
  第二个参数指定正则表达式的修饰符。只能传入g ,i,m或者其组合,可以省略
  var zipcode = new RegExp("/\d{5}","g");
 2. 属性
  source  包含正则表达式文本
  global  布尔值,表明这个正则表达式是否带有修饰符g
  ignoreCase 布尔值,表明这个正则表达式是否带有修饰符i
  multiline 布尔值,表明这个正则表达式是否带有修饰符m
  lastIndex 如果匹配模式带有g,这个属性存储在整个字符串中下一次检索的开始位置,这个属性会被exec(), test()方法调用到
 3.方法
  1) exec() 
   与match类似。参数为字符串。对一个指定的字符串执行一个正则表达式在一个字符串中执行匹配检索,如果没有找到任何匹配,返回null,如果找到了匹配,返回一个数组。这个数组元素中的第一个元素包含与正则表达式相匹配的子字符串,剩余的元素是圆括号内的子表达式相匹配的子串。当调用的正则表达式对象具有修饰符g时,它将把当前正则表达式对象的lastIndex属性设置为紧挨着匹配子串的字符位置,当同一个正则表达式第二次调用exec()时,它将从lastIndex属性所指的字符处开始检索。如果没有匹配到任何结果将lastIndex重置为0.

var pattern = /Java/ig;
   var text = "JavaScript is more fun than java_is good";
   var result;
   while((result = pattern.exec(text))!=null){
    console.log(result[0]+" at "+result.index);
   }
  2) test() 
   参数为字符串。用test()对某个字符串进行检测,如果包含正则表达式的一个匹配结果,返回true.调用test()和调用exec()行为等价,test()会从lastIndex指定位置处开始检索某个字符串,如果它找到了一个匹配结果,立即设置lastIndex为当前匹配字符串的结束位置。

var pattern = /Java/ig;
   var text = "JavaScript is more fun than java_is good";
   var pattern.test(text); //结果 true
   与test() exec()不同,String方法search() replace() match()并不会用到lastIndex属性

时间: 2024-10-28 22:56:08

JavaScript--正则表达式的相关文章

javascript正则表达式修饰符之multiline(/m)的使用

javascript正则表达式有3种修饰符/i./m和/g./i是我们最常用,也是最好理解的,代表正则表达式匹配的时候不区分大小写. var regex = /abc/i; alert(regex.test("aBc"));//true /m代表多行模式multiline,如果目标字符串中不含有换行符\n,即只有一行,那么/m修饰符没有任何意义. var multiline = /abc/m; var singleline = /abc/; //目标字符串不含换行符\n var tar

javascript 正则表达式补充

定义 JavaScript种正则表达式有两种定义方式,定义一个匹配类似 <%XXX%> 的字符串 1. 构造函数 var reg=new RegExp('<%[^%>]+%>','g'); 2. 字面量 var reg=/<%[^%>]%>/g; g: global,全文搜索,默认搜索到第一个结果接停止 i: ingore case,忽略大小写,默认大小写敏感 m: multiple lines,多行搜索 元字符 正则表达式让人望而却步以一个重要原因就是其转

javascript正则表达式定义的方法是什么

javascript正则表达式的2种定义方法:一种是直接调用RegExp(),第二种是直接用字面量来定义,即var re = /正则规则/; js正则表达式的2种定义方法本质都是调用RegExp()方法 在调用同一段正则代码的时候,ECMAScript3和ECMAScript5中表现完全不一样 function reg(){ var re = /\sjavascript/; return re; } 分别在ECMAScript3和ECMAScript5中调用reg()方法多次 在ECMAScri

web前端之JavaScript正则表达式

web前端之JavaScript正则表达式 后面有代码: \d 表示数字 \d? ?表示0个或者一个 \d+ +表示一个或者多个 \d{3} 表示三个 \d{3,5} 表示三到五个 \d{3,} 表示至少出现3次 \d* *表示0到任意个 \b 表示单词边界 \B 表示非单词边界 \bis\b 表示查找" is "的 . 表示任意字符 \ 表示转译 http:(\/\/.+\.jpg) 用()进行分组 $1 获取其内部东西 []表示或 ^表示开头 $表示结尾 g表示全局 \d{4}[/

JavaScript - 正则表达式举例

JavaScript - 正则表达式举例 正则表达式的大致匹配过程是:依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,则匹配成功:一旦有匹配不成功的字符则匹配失败. 正则表达式通常用于在文本中查找匹配的字符串.Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符:非贪婪的则相反,总是尝试匹配尽可能少的字符.例如:正则表达式"ab*"如果用于查找"abbbc",将找到"abbb".而如果使用非贪婪

javascript正则表达式简介

javascript正则表达式 javascript正则表达式 regular expression是一个描述字符模式的对象: ECMAScript中的RegExp类表示正则表达式: String和RegExp都定义了使用正则表达式进行强大的模式匹配.文本检索和替换的函数: 正则表达式主要用来验证客户端的输入数据: Ⅰ.创建正则表达式 类似于创建字符串,可以使用new运算符也可以采用字面值: 参数 含义 g 全局匹配 i 忽略大小写 m 多行匹配 下文中的javascript代码是通过 Ecli

自己实现的一款在线Javascript正则表达式测试器——JRE-Parser

本文最初发布于我的个人博客:http://jerryzou.com/posts/jreparser/ 昨天在看<正则表达式30分钟入门教程>的时候,看到博主自己实现了一个C#写的正则测试器,看上去挺方便的样子.但是我自己又不太喜欢乱装东西,所以寻思着能不能自己实现一个javascript正则表达式测试器.于是几十行代码实现了这样一个正则测试器. 先展示一下0.1版本的效果图吧~ 页面还比较简单,但是基本功能算是有了.可以正常使用~. 关于怎么从用户的输入中提取正则表达式的过程多亏@依云大神提点

JavaScript之基础-10 JavaScript 正则表达式(概述、定义正则、RegExp对象、用于模式匹配的String方法)

一.JavaScript 正则表达式概述 正则表达式概述 - 正则表达式(Regular Expression): 由一些普通字符和特殊字符组成的,用以描述一种特定的字符规则的表达式 - 正则表达式常用于在一段文本中搜索.匹配或替换特定形式的文本.如:词语出现频率统计.验证字符串是否符合邮件格式.屏蔽一篇帖子中的限制性词语等 正则表达式初体验 - 验证用户输入的手机格式是否合法 二.JavaScript 定义正则表达式 普通字符 - 所有的单个大小写字母.数字都是一个正则表达式,用以匹配单个字符

JavaScript正则表达式-字符

JavaScript正则表达式字符包括两类: 1.普通字符. 2.转义字符. 普通字符 大小写字母.数字.其他任何符号. 转义字符 转义字符 含义 \f 换页符 \n 换行符 \r 回车符 \t 制表符 \b 退格符 \o 空字符 \xnn 由十六进制数nn指定的ASCII码对应的字符 \uxxx 由十六进制数xxxx指定的Unicode字符 \\ 反斜线 ^ 要匹配"^"字符本身需要使用"\^" $ 要匹配"$"字符本身需要使用"\$

JavaScript正则表达式语法及使用范例大全

JavaScript正则表达式 1.      使用JS正则表达式,首先要了解JS正则表达式的常用符号,如下图: /-/ 代表一个模式的开始和结束 ^ 匹配字符串的开始 $ 匹配字符串的结束 \s 匹配一个空白字符 \S 匹配一个非空白字符 \d 匹配一个数字字符,等价于[0-9] \D 匹配一个非数字字符,等价于[^0-9] \w 匹配一个数字.字母.或下划线,等价于[A-Za-z0-9_] . 匹配一个除了换行符之外的字符 \ 转义字符,对于上述这些特殊的符号,如果要匹配,则需要加\进行转义