美文网首页
正则表达式简单操作

正则表达式简单操作

作者: 流着万条永远的河 | 来源:发表于2017-09-18 18:18 被阅读0次

使用单个字符串来描述、匹配一系列符合某个语法规则的字符串,它通常被用来检索、替换那些符合某个模式的文本。比如,登录框,用户输入信息,用它判断输入信息是不是符合格式。JS里有个对象,通过它创建一个规则,对字符串进行匹配,看看字符串是不是匹配规则,匹配上了就是true,否则false。

创建

内置对象RegExp:

var reg=new RegExp('<%[^%>]+%>','g')   //构造函数太复杂了

字面量写法:

var reg=/<%[^%>]%>/g
undefined
reg
/<%[^%>]%>/g
有几个修饰符:
//最后的g代表global,全局搜索,不添加只搜到第一个结果停止。
//i:ingore case,忽略大小写,默认大小写敏感
//m:multiple lines,多行搜索
var reg=/hello/gi
undefined
reg
/hello/gi               //在控制台展示效果像是字符串形式,其实reg是个复杂对象,展示出来看起来像是字符串。

最根本的是函数写法,符合原意,但是太麻烦,字面量写法就是用符号代替函数的意义,应用上更方便了。构造函数里面格式是字符串,字面量写法里面是正常的写法。

元字符

在正则表达式中有特殊意义的字符,可以规定其前导字符,并不多。

([{\^$|)?*+.

如果想用这些元字符的本来意义,要先转义,用\。

\t         //水平制表符
\r            //回车符
\n         // 换行符
\f         //换页符
\cX         //与X对应的控制字符
\v          //垂直制表符
\0             //空字符

字符类

var reg=/ab\t/

正则表达式只是匹配字符串,作用就太小了,它能匹配类,某一类有共同规则的。

范围

var reg=/[a-z]/ig
var reg=/[0-9]/ig
var reg=/[abc012]/ig
//[]出现,代表一个字符的挑选,只能代表一个字符的占位哦。

取反

var reg=/[^abc012]/ig
//只要不是abc012它们中的任何一个,就会被选中。

区间

[a-z]
var reg=/[0-9a-zA-Z]/ig

一定意义的匹配

. === [^\r\n]除回车换行外的所有字符
\d === [0-9]数字字符
\D === [^0-9]非数字字符
\s === [\t\n\x0B\f\r]空白符:回车换行制表空格就可以了,\x0B是垂直制表符
\S === [^\t\x0B\f\r\n]非空白符
\w === [a=zA=Z0-9]单词字母数字下划线
\W === [^a-zA-Z_0-9]非单词字母数字下划线
var str ='hello world 123456 \t \r jirengu \n ruoyu'
undefined
str
"hello world 123456      
 jirengu 
 ruoyu"
看图运行比较好:
\t制表嘛,就是我选中的长的蓝色部分,再看空格\r短的蓝色部分
\n换行嘛。
str
"hello world 123456      
 jirengu 
 ruoyu"
str.search('world')
6
str.match('world')
["world", index: 6, input: "hello world 123456   
 jirengu ↵ ruoyu"]
str.match(/\d/)
["1", index: 12, input: "hello world 123456      
 jirengu ↵ ruoyu"]
str.match(/\d/g)
(6) ["1", "2", "3", "4", "5", "6"]0: "1"1: "2"2: "3"3: "4"4: "5"5: "6"length: 6__proto__: Array(0)
str.match(/\w/g)
(28) ["h", "e", "l", "l", "o", "w", "o", "r", "l", "d", "1", "2", "3", "4", "5", "6", "j", "i", "r", "e", "n", "g", "u", "r", "u", "o", "y", "u"]
str.match(/\W/g)
(10) [" ", " ", " ", "  ", " ", "
", " ", " ", "↵", " "]0: " "1: " "2: " "3: "    "4: " "5: "
"6: " "7: " "8: "↵"9: " "length: 10__proto__: Array(0)
str.match(/./g)
(36) ["h", "e", "l", "l", "o", " ", "w", "o", "r", "l", "d", " ", "1", "2", "3", "4", "5", "6", " ", "  ", " ", " ", "j", "i", "r", "e", "n", "g", "u", " ", " ", "r", "u", "o", "y", "u"]
str.match(/ /g)
    (7) [" ", " ", " ", " ", " ", " ", " "]

边界

^            以XXXX开头
$           以XXXX结尾
\b      单词边界
\B     非单词边界
str
"hello world 123456      
 jirengu 
 ruoyu"

str.match(/[^hello]/g)            //有[]匹配的是一个字符
(29) [" ", "w", "r", "d", " ", "1", "2", "3", "4", "5", "6", " ", " ", " ", "
", " ", "j", "i", "r", "n", "g", "u", " ", "↵", " ", "r", "u", "y", "u"]
str.match(/^hello/g)          //没有[]匹配的是以什么什么开头的
["hello"]0: "hello"length: 1__proto__: Array(0)
str
"hello world 123456      
 jirengu 
 ruoyu"
str.match(/hello$/g)
null
var str ='hello world 123456 \t \r jirengu \n ruoyu hello'
undefined
str.match(/hello$/g)
["hello"]0: "hello"length: 1__proto__: Array(0)

var str ='hello1 world hello2 123456 \t \r jirengu \n ruoyu hello3'
undefined
str.match(/hello\d/g)
(3) ["hello1", "hello2", "hello3"]0: "hello1"1: "hello2"2: "hello3"length: 3__proto__: Array(0)
str.match(/hello\d$/g)
["hello3"]
str.match(/^hello/g)
["hello"]0: "hello"length: 1__proto__: Array(0)
str.match(/^hello1/g)
["hello1"]
str.match(/^hello\d/g)
["hello1"]
var str ='hello1 whello9orld hello2 12-hello8-3456 \t \r jirengu \n ruoyu hello3'
undefined
str.match(/\bhello\d\b/g)
(4) ["hello1", "hello2", "hello8", "hello3"]0: "hello1"1: "hello2"2: "hello8"3: "hello3"length: 4__proto__: Array(0)
var str ='hello1 hello9orld hello2 12-hello8-3456 \t \r jirengu \n ruoyu hello3'
undefined
str.match(/\bhello\d/g)
(5) ["hello1", "hello9", "hello2", "hello8", "hello3"]
str.match(/hello\d\b/g)
(4) ["hello1", "hello2", "hello8", "hello3"]
//单词边界可以是空格,可以是特殊字符-,不可以是数字和字母
//单词边界有哪些特殊字符,除了-,\t \r \n呢?
var str ='\thello1 hello9orld hello2 12-hello8-3456 \t \r jirengu \n ruoyu hello3'
undefined
str.match(/\bhello\d\b/g)
(4) ["hello1", "hello2", "hello8", "hello3"]
var str ='\rhello1 hello9orld hello2 12-hello8-3456 \t \r jirengu \n ruoyu hello3'
undefined
str.match(/\bhello\d\b/g)
(4) ["hello1", "hello2", "hello8", "hello3"]
var str ='\nhello1 hello9orld hello2 12-hello8-3456 \t \r jirengu \n ruoyu hello3'
undefined
str.match(/\bhello\d\b/g)
(4) ["hello1", "hello2", "hello8", "hello3"]

小测试:

var str = 'header clearfix active header-fix'
undefined
//找单词header
str.match(/(^|\s)header($|\s)/g)
["header "]

量词

?        出现0次或1次
+       至少出现1次
*           出不出现都可以 
{n}     出n次
{n,m}   出现n到m次
{n,}    至少出现n次
var str='http://jirengu.com'
undefined
var str2='https://jirengu.com'
undefined
str.match(/https?:\/\/.+/)
["http://jirengu.com", index: 0, input: "http://jirengu.com"]
str2.match(/https?:\/\/.+/)
["https://jirengu.com", index: 0, input: "https://jirengu.com"]
var str3='httpsssss://sandan.com'
undefined
str3.match(/https+:\/\/.+/)
["httpsssss://sandan.com", index: 0, input: "httpsssss://sandan.com"]
str.match(/(https?)?:\/\/.+/)
(2) ["http://jirengu.com", "http", index: 0, input: "http://jirengu.com"]0: "http://jirengu.com"1: "http"index: 0input: "http://jirengu.com"length: 2__proto__: Array(0)
var str4='://nsannan.snf'
undefined                //这里的写错了应该没冒号的,不过方法是方法,道理一样的
str4.match(/(https?)?:\/\/.+/)
(2) ["://nsannan.snf", undefined, index: 0, input: "://nsannan.snf"]
str2.match(/(https?)?:\/\/.+/)
(2) ["https://jirengu.com", "https", index: 0, input: "https://jirengu.com"]

如何判断字符串是网址?严谨写法如此:
str.match(/(https?:)?\/\/.+/)
(2) ["http://jirengu.com", "http:", index: 0, input: "http://jirengu.com"]

如何判断电话号码:1开头,共十一位数字,结尾。

var str='19281712837'
undefined
str.match(/^1[3578]\d{9}/)
null
var str2='18825256114'
undefined
str2.match(/^1[3578]\d{9}/)
["18825256114", index: 0, input: "18825256114"]
var str3='aa135666666'
undefined
var str3='aa13566666687'
undefined
str3.match(/^1[3578]\d{9}/)
null
var str4='188252561142382'
undefined
str4.match(/^1[3578]\d{9}/)
["18825256114", index: 0, input: "188252561142382"]
str4.match(/^1[3578]\d{9}$/)
null
str2.match(/^1[3578]\d{9}$/)
["18825256114", index: 0, input: "18825256114"]

相关文章

  • ios拓展17-ios正则表达式

    给大家来个简单的正则表达式操作 正则表达式匹配规则:http://www.runoob.com/regexp/re...

  • iOS正则表达式(作笔记)

    原文iOS-正则表达式的简单使用 一、什么是正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的...

  • 爬虫数据筛选

    目录清单 正则表达式提取数据 正则表达式案例操作 Xpath提取数据 Xpath案例操作 BeautifulSou...

  • 爬虫处理之结构化数据操作

    目录清单 正则表达式提取数据 正则表达式案例操作 Xpath提取数据 Xpath案例操作 BeautifulSou...

  • 爬虫处理之结构化数据操作

    目录清单 正则表达式提取数据 正则表达式案例操作 Xpath提取数据 Xpath案例操作 BeautifulSou...

  • 爬虫处理之结构化数据操作

    目录清单 正则表达式提取数据 正则表达式案例操作 Xpath提取数据 Xpath案例操作 BeautifulSou...

  • 爬虫处理——结构化数据操作

    爬虫处理之结构化数据操作 目录清单 正则表达式提取数据 正则表达式案例操作 Xpath提取数据 Xpath案例操作...

  • 第十三讲 文件和正则表达式

    本章主要说的是文件的相关操作,和正则表达式 本章要点: 文件操作 序列化 正则表达式 13.1 文件操作 13.1...

  • 正则表达式简单操作

    使用单个字符串来描述、匹配一系列符合某个语法规则的字符串,它通常被用来检索、替换那些符合某个模式的文本。比如,登录...

  • re模块入门

    正则表达式常用操作符 正则表达式语法实例 经典正则表达式实例

网友评论

      本文标题:正则表达式简单操作

      本文链接:https://www.haomeiwen.com/subject/ojfbsxtx.html