文章标题

创建一个正则表达式

使用一个正则表达式字面量,如下所示:

var re = /ab+c/;

调用RegExp对象的构造函数,如下所示:

var re = new RegExp("ab+c");

编写一个正则表达式的模式

简单模式


var re = /abc/;

这样就能匹配’abc’字符串

使用特殊符号

当你需要搜索一个比直接匹配需要更多条件的匹配时,比如寻找一个或多个 ‘b’,或者寻找空格,那么这时模式将要包含特殊字符。比如, 模式/ab*c/匹配了一个单独的 ‘a’ 后面跟了零个或者多个 ‘b’(*的意思是前面一项出现了零个或者多个),且后面跟着 ‘c’ 的任何字符组合。在字符串 “cbbabbbbcdebc” 中,这个模式匹配了子字符串 “abbbbc”。

\的含义:

转义字符,在非特殊字符之前的反斜杠表示下一个字符是特殊的,不能从字面上解释。例如,没有前面’\’的’b’通常匹配小写’b’,无论它们出现在哪里。如果加了’\’,这个字符变成了一个特殊意义的字符,意思是匹配一个字符边界。

/a*/ – 代表的意思是匹配0个a或多个a,如果/a*/这个时候被转义,只匹配a.

^ 字符

例如,/^A/ 并不会匹配 “an A” 中的 ‘A’,但是会匹配 “An E” 中的 ‘A’。

$ 符号

例如,/t$/ 并不会匹配 “eater” 中的 ‘t’,但是会匹配 “eat” 中的 ‘t’。

  • 符号 –匹配前一个表达式0次或多次。等价于 {0,}。

    例如,/bo*/会匹配 “A ghost boooooed” 中的 ‘booooo’ 和 “A bird warbled” 中的 ‘b’,但是在 “A goat grunted” 中将不会匹配任何东西。

  • 符号

    例如,/a+/匹配了在 “candy” 中的 ‘a’,和在 “caaaaaaandy” 中所有的 ‘a’。

? 符号

例如,/e?le?/ 匹配 “angel” 中的 ‘el’,和 “angle” 中的 ‘le’ 以及”oslo’ 中的’l’。

. 符号

例如,/.n/将会匹配 “nay, an apple is on the tree” 中的 ‘an’ 和 ‘on’,但是不会匹配 ‘nay’。

(x) 符号

匹配 ‘x’ 并且记住匹配项,就像下面的例子展示的那样。括号被称为 捕获括号。

x(?=y)

匹配’x’仅仅当’x’后面跟着’y’.这种叫做正向肯定查找。

x(?!y)

匹配’x’仅仅当’x’后面不跟着’y’,这个叫做正向否定查找。

x|y

匹配‘x’或者‘y’。

{n}

n是一个正整数,匹配了前面一个字符刚好发生了n次。

{n,m}

n 和 m 都是正整数。匹配前面的字符至少n次,最多m次。如果 n 或者 m 的值是0, 这个值被忽略。

[xyz]

一个字符集合。

[^xyz]

一个反向字符集。

[\b]

匹配一个退格(U+0008)。

\b

匹配一个词的边界。/\bm/匹配“moon”中得‘m’;

\B

匹配一个非单词边界。例如,/\B../匹配”noonday”中得’oo’, 而/y\B./匹配”possibly yesterday”中得’ye‘.

\d

匹配一个数字。

\D

匹配一个非数字字符。

\s

匹配一个空白字符,包括空格、制表符、换页符和换行符。

\S

匹配一个非空白字符。例如, /\S\w*/ 匹配”foo bar.”中的’foo’。

\w

匹配一个单字字符(字母、数字或者下划线)。例如, /\w/ 匹配 “apple,” 中的 ‘a’,”$5.28,”中的 ‘5’ 和 “3D.” 中的 ‘3’。

\W

匹配一个非单字字符。例如, /\W/ 或者 /[^A-Za-z0-9_]/ 匹配 “50%.” 中的 ‘%’。

使用正则表达式

在接下来的例子中,脚本将使用exec方法在一个字符串中查找一个匹配。

var myRe = /d(b+)d/g;
var myArray = myRe.exec("cdbbdbsbz");

如果你不需要访问正则表达式的属性,这个脚本通过另一个方法来创建myArray:

var myArray = /d(b+)d/g.exec("cdbbdbsbz");

如果你想通过一个字符串构建正则表达式,那么这个脚本还有另一种方法:

var myRe = new RegExp("d(b+)d", "g");
var myArray = myRe.exec("cdbbdbsbz");

通过这些脚本,匹配成功后将返回一个数组并且更新正则表达式的属性,如下表所示。

例子

改变输入字符串的顺序

// 匹配的字符串
var names = "Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ; Chris Hand ";

var output = ["---------- Original String\n", names + "\n"];

// Prepare two regular expression patterns and array storage.
// Split the string into array elements.

// 下面的reg就能将names从分号和空格进行截断
var pattern = /\s*;\s*/;
var nameList = names.split(pattern);
pattern = /(\w+)\s+(\w+)/;
var bySurnameList = [];
output.push("---------- After Split by Regular Expression");

var i, len;
for (i = 0, len = nameList.length; i < len; i++){
output.push(nameList[i]);
bySurnameList[i] = nameList[i].replace(pattern, "$2, $1");
}

// Display the new array.
output.push("---------- Names Reversed");
for (i = 0, len = bySurnameList.length; i < len; i++){
output.push(bySurnameList[i]);
}

// Sort by last name, then display the sorted array.
bySurnameList.sort();
output.push("---------- Sorted");
for (i = 0, len = bySurnameList.length; i < len; i++){
output.push(bySurnameList[i]);
}

output.push("---------- End");

console.log(output.join("\n"));

用特殊字符检验输入

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<script type="text/javascript">
//其中两个(),(?:x),\d单个数字出现3次,[-/.]
var re = /(?:\d{3}|\(\d{3}\))([-\/\.])\d{3}\1\d{4}/;
function testInfo(phoneInput){
var OK = re.exec(phoneInput.value);
if (!OK)
window.alert(RegExp.input + " isn't a phone number with area code!");
else
window.alert("Thanks, your phone number is " + OK[0]);
}
</script>
</head>
<body>
<p>Enter your phone number (with area code) and then click "Check".
<br>The expected format is like ###-###-####.</p>
<form action="#">
<input id="phone"><button onclick="testInfo(document.getElementById('phone'));">Check</button>
</form>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值