正则表达式简明教程

简介和实例

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来提取一大段字符串中,含有的特定格式子字符串。正则表达式是由普通字符以及特殊字符组成的文字模式。

1、提取数字部分
# 从字符串"abc123def"中,提取出数字部分
var str = "abc123def";
var patt1 = /[0-9]+/;
document.write(str.match(patt1));

# 输出结果:123
2、找出相邻且相同单词
# Is is the cost of of gasoline going up up?
# 找出上面字符串中所有相邻两个单词是相同的字符(不区分大小写)

var str = "Is is the cost of of gasoline going up up";
var patt1 = /\b([a-z]+) \1\b/ig;
document.write(str.match(patt1));

# 结果
Is is
of of
up up

# 说明
两个\b表明了一个单词边界;
[a-z]+ 表示一个单词;
([a-z]+) 会匹配字符串中所有单词并存储起来;
 \1 表示访问上面存储的第一个单词;
3、url识别
var str = "http://www.runoob.com:80/html/html-tutorial.html";
var patt1 = /(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/;
arr = str.match(patt1);
for (var i = 0; i < arr.length ; i++) {
    document.write(arr[i]);
    document.write("<br>");
}
4、正则表达式的两种使用方式
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>smallpdf.cn</title>
</head>

<body>

    <script>
        // (patt1 等同于 patt2)正则表达式的两种使用方式
        var str = "Is is the cost of of gasoline going up up";
        var patt1 = /\b([a-z]+) \1\b/ig;
        document.write("实例1:", str.match(patt1));

        document.write("<br><br>");
        var patt2 = new RegExp("\\b([a-z]+) \\1\\b", "ig")
        document.write("实例2:"+str.match(patt2));

    </script>

</body>

</html>
5、全局与非全局匹配
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>smallpdf.cn</title>
</head>

<body>

    <script>

        var str = "Google smallpdf.cn taobao smallpdf.cn";
        var n1 = str.match(/smallpdf.cn/);   // 查找第一次匹配项
        var n2 = str.match(/smallpdf.cn/g);  // 查找所有匹配项

        document.write("实例1:", n1);
        document.write("<br><br>");
        document.write("实例2:", n2);

    </script>

</body>

</html>
6、匹配E-Mail(邮箱)
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>smallpdf.cn</title>
</head>

<body>

    <script>
        var str = "abcd test@runoob.com 1234";
        var patt1 = /\b[\w.%+-]+@[\w.-]+\.[a-zA-Z]{2,6}\b/g;
        document.write(str.match(patt1));
    </script>

</body>

</html>
7、动手验证实践一下

正则语法
1、定位符

定位符可将正则表达式固定在:行首、行尾、一个单词内、单词开头、单词结尾。定位符不能跟限定符一起使用,譬如:^* 这是错误的,因为 一个字符串只有1个开始,不存在0个或多个开始。

正则含义字符串正则表达式结果
^表示字符串的开始“An E”/^A/‘A’
$表示字符串的结束“eat”/t$/‘t’
\b单词的前后边界“moon”/\bm/‘m’(查找m开头单词)
\B单词的非边界部分“noonday”/\Boo/‘oo’(单词中包含oo且不在单词边界)
/正则表达式的终止符
\转义符,转义后面跟的字符

2、普通字符
正则含义字符串正则表达式结果
\d匹配一个数字,等价于[0-9]“B2 is the suite number.”/\d/‘2’
\D匹配一个非数字字符,等价于[^0-9]“B2 is the suite number.”/\D/‘B’
\w匹配一个字符(数字、字母、下划线),等同 [A-Za-z0-9_]“apple,”/\w/‘a’
\W匹配一个字符,等价于 [^A-Za-z0-9_]“50%.”/\W/‘%’
\s匹配一个空白字符(空格、制表符、换页符、换行符)“foo bar.”/\s\w*/’ bar’
[\S]匹配一个非空白字符“foo bar.”/\S\w*/‘foo’
.匹配任一字符,换行符(\n、\r)除外,等同 [^\n\r]“nay, an apple is on the tree”/.n/‘an’、‘on’
[abc]匹配a、b、c中任一字符,*.在括号内只表示字符本身,没有其他特殊意义“asdfiobab”/[abc]/‘a’、‘b’、‘a’、‘b’
[^abc]不包含a、b、c的所有字符
[A-Z]匹配A到Z中任一字符
[a-z]匹配a到z中任一字符
[0-9]匹配0到9中任一数字

3、限定符
正则含义字符串正则表达式匹配结果
匹配 0 或 1 次
等同 {0,1}
“angel”/e?le?/‘el’
*匹配 0 次或多次
等同 {0,}

smallpdf.cn

/<.*>/

smallpdf.cn

*?消除贪婪,匹配尽可能少

smallpdf.cn

/<.*?>/

’ 和 ‘

+匹配次数≥1,等同 {1,}

smallpdf.cn

/<.+>/

smallpdf.cn

+?消除贪婪,匹配尽可能少

smallpdf.cn

/<.+?>/

’ 和 ‘

{n}n是正整数,匹配次数 = n
{n,}n是正整数,匹配次数 ≥ n
{n,m}n和m都是整数
n ≤ 匹配次数 ≤ m
n或m为0,忽略

4、逻辑运算
正则含义字符串正则表达式匹配结果
x|y匹配 x 或 y“red apple”/green|red/‘red’
(x)匹配x,并存储匹配值,
\数字 来访问存储值,
\1是指第一个存储值。
看下面实例
\num返回第num个缓存值,num是整数从1开始。“apple, orange, cherry, peach.”/apple(,)\sorange\1/‘apple, orange,’
(?:x)匹配x,但不存匹配字符,
industry|industries
= industr(?:y|ies)
x(?=y)匹配 x 且后面是 y,不存匹配值“JackSpa”/Jack(?=Spa)/‘Jack’
x(?!y)匹配 x 且后面不是 y,不存匹配值“JackSp”/Jack(?!Spa)/‘Jack’
(?<=y)x匹配 x 且前面是 y,不存匹配值“JackSpa”/(?<=Jack)Spa/‘Spa’
(?<!y)x匹配 x 且前面不是 y ,不存匹配值“JacSpa”/(?<!Jack)Spa/‘Spa’

5、非打印字符
正则含有
[\b]匹配一个退格(U+0008)
\f匹配一个换页符 (U+000C)
\n匹配一个换行符 (U+000A)
\r匹配一个回车符 (U+000D)
\t匹配一个水平制表符 (U+0009)
\v匹配一个垂直制表符 (U+000B)
\0匹配 NULL(U+0000)字符, 不要在这后面跟其它小数,因为 \0<digits> 是一个八进制转义序列。
\xhh匹配一个两位十六进制数(\x00-\xFF)表示的字符
\uhhhh匹配一个四位十六进制数表示的 UTF-16 代码单元
\u{hhhh}匹配一个十六进制数表示的 Unicode 字符

6、模式设定
正则含有
g表示全局搜索选项或标记,将在整个字符串查找并返回所有匹配结果。
i表示不区分大小写
m多行搜索
s允许 . 匹配换行符
u使用unicode码的模式进行匹配
y执行“粘性(sticky)”搜索,匹配从目标字符串的当前位置开始。
7、运算符的优先级

正则表达式从左到右进行计算,优先级高的先运算,相同优先级从左到右进行,下表从上之下,优先级依次递减,同一行优先级相同:

正则原算法
\
() []
^ $ \
|

相关参考链接:
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值