《中级前端1.12》JavaScript正则表达式

正则表达式是由一个字符序列形成的搜索模式。当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容。正则表达式可以是一个简单的字符,或一个更复杂的模式。正则表达式可用于所有文本搜索和文本替换的操作。 

 

http://www1.w3cfuns.com/tools.php?mod=regex

正则表达式在线调试工具

http://regexper.com/

正则表达式在线分析工具

 

 

定义和使用

var patt1 = new RegExp("hello");
var patt2 = /world/;

 

test方法

  test() 方法检索字符串中的指定值。返回值是 true 或 false。

var pat = /my/; 
var str = "this is my code..."; 
console.log(pat.test(str)); // true 

 

exec方法

  exec() 方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。

var pat = /hello/; 
console.log(pat.exec("oh hello world")); //返还["hello", index: 3, input: "oh hello world"]

 

正则表达式类型  /pattern/attributes

  参数 attributes 是一个可选的字符串,常用属性 "g"、"i" ,分别用于指定全局匹配、区分大小写的匹配。

  match() 是String的方法匹配到一个结果时,和pat.exec(str)返回类型一样;用正则属性g匹配时,返还字符串数组

//不区分大小写 
var str = "Visit Hunger";
var patt1 = /hunger/i;
console.log(str.match(patt1));
//全局匹配
var str = "hello hunger valley! I am hunger";
var patt2 = /hunger/g;
console.log(str.match(patt2));
//不区分大小写,全局匹配 
var str = "hello Hunger valley! I am hunger";
var patt3 = /hunger/gi;
console.log(str.match(patt3)); //返回 ["Hunger", "hunger"]

 

字符串正则

1. search

  字符串查找,搜索到返还位置,搜索不到返还-1

var str="Visit W3School!"; 
console.log(str.search(/w3school/)); //-1       
console.log(str.search(/w3school/i)); //6

 

2. match

  字符串匹配,返回查询对应的一个数组

var str="1 plus 2 equal 33"; 
console.log(str.match(/\d+/));   //["1", index: 0, input: "1 plus 2 equal 33"]
console.log(str.match(/\d+/g));  //["1", "2", "33"]

 

3. replace

  字符串替换

var str = "Hello jike! oh I am jikexueyuan"
console.log(str.replace(/jike/, "test"));      //Hello test! oh I am jikexueyuan
console.log(str.replace(/jike/ig, "test"));   //Hello test! oh I am testxueyuan
console.log(str);   //Hello jike! oh I am jikexueyuan

上方例子可以看到,replace后str的值并没有改变,说明replace中是按值传递,不会影响原来的变量。

 

4. split

  字符串分割

var str = "Hello Hunger   , oh I am Hunger"; 
str.split("");   //["H", "e", "l", "l", "o", " ", "H", "u", "n", "g", "e", "r", " ", " ", " ", ",", " ", "o", "h", " ", "I", " ", "a", "m", " ", "H", "u", "n", "g", "e", "r"]
str.split(/\s+/);    //["Hello", "Hunger", ",", "oh", "I", "am", "Hunger"]

\s 表示以空格为分割符

\s+ 会把多个连续空格看作一个空格来分割

 

 

正则写法

[adgk] 查找方括号之间的任何字符。

var str="Is this all there is?"; 
var patt1=/[a-h]/g;
console.log(str.match(patt1));  //["h", "a", "h", "e", "e"]

 

[^adgk] 查找任何不在方括号之间的字符。

var str="hello jikexueyuan!"; 
var patt1=/[^jike]/g; 
console.log(str.match(patt1));  //["h", "l", "l", "o", " ", "x", "u", "y", "u", "a", "n", "!"]

 

[0-9] 查找任何从 0 至 9 的数字。

 

[a-z] 查找任何从小写 a 到小写 z 的字符。

 

[A-Z] 查找任何从大写 A 到大写 Z 的字符。

 

[A-z] 查找任何从大写 A 到小写 z 的字符。


red|blue|green 查找任何指定的选项。 相当于or

var str="hello hunger! How are you?"; 
var patt1=/hello|you/g; 
console.log(str.match(patt1));   //["hello", "you"]

 

. 查找单个字符,除了换行和行结束符。

var str="That's hdot!"; 
var patt1=/h.t/g; 
console.log(str.match(patt1));  //["hat"]

hat中,h和t之间只有一个字符,匹配成功。 hdot中,h和t之间超过一个字符,不能匹配。

 

 

\w 查找单词字符(字母、数字、下划线)。

var str="Give 100%!"; 
var patt1=/\w/g; 
document.write(str.match(patt1));   //G,i,v,e,1,0,0

\W 查找非单词字符。 空格也会输出

var str="Give$ 100% hehe!"; 
var patt1=/\W/g; 
document.write(str.match(patt1));  //$, ,%, ,!  可以看到两个空格也输出了

 

\d 查找数字。

var str="Give 100%!";  
var patt1=/\d/g; 
document.write(str.match(patt1));  //1,0,0

\D 查找非数字字符。

 

\s 查找空白字符(空格、tab、换行、回车)。

\s+ 多个连续的空白字符会被看作一个空白字符。

 

 

\b 匹配单词边界。 

var str = "moon";
var patt1 = /\bm/g;
document.write(str.match(patt1));    //m

var str = "moon";
var patt2 = /oon\b/g;
document.write(str.match(patt2));    //oon

m是moon的左边界,能匹配到m;oon是moon的右边界;oo匹配不到,因为他不是边界。

\B 匹配非单词边界。

 

n+ 匹配任何包含至少一个 n 的字符串

n$ 匹配任何结尾为 n 的字符串。

^n 匹配任何开头为 n 的字符串。

 

常见正则

手机号: 1[0-9]{10}

邮箱: (\S)+[@]{1}(\S)+[.]{1}(\w)+

 


 

http://www1.w3cfuns.com/tools.php?mod=regex

正则表达式在线调试工具

http://regexper.com/

正则表达式在线分析工具

 

posted @ 2016-01-14 15:46  暖风叔叔  阅读(203)  评论(0)    收藏  举报