松江网站建设推广,个人网站样式,网站后台哪些功能需要前端配合,php做公司网站我们已经会熟练使用js字符串类型了#xff0c;例如你想知道一个变量是否等于一个字符串#xff0c;可能可能这样判断 if(ahello,world){...
}
复制代码但是往往我们有时候对一些字符串判断显得力不从心#xff0c;例如判断一个文件的类型是否为js类型#xff0c;可能有下面…我们已经会熟练使用js字符串类型了例如你想知道一个变量是否等于一个字符串可能可能这样判断 if(ahello,world){...
}
复制代码但是往往我们有时候对一些字符串判断显得力不从心例如判断一个文件的类型是否为js类型可能有下面几种文件名格式 1, hello.js
2, js.hello
3, hellojs
4, helljso
复制代码以我们人脑的认知来看我们一眼能够看出只有第一个符合我们的要求但是我们怎么写这个判断程序呢例如我们可以这样判断例如js字符串方法从右边往左边取三位如果为‘.js’则匹配成功。 但是我问一下如果文件名描述为hello..js呢显然这种方法不太适合所以需要正则表达式来进行精确匹配了。 正则表达式用于描述一种特征就例如你描述某某女生长得怎么样一样。例如瓜子脸一米六到一米七长头发... 同理我们可以使用正则表达式来描述我们需要的字符例如邮箱格式 一串数字或者字母字符串或者数字.数字或者字符串
复制代码我们怎么用代码来描述我们的这个对象呢,我们可以使用例如下面的写法 var a/hello/i
或者
var a new RegExp(hello,i);
复制代码/ / 之间写入你的匹配规则 后面加一个修饰符i 或者g或者m i表示忽略大小写即人为HELLO和hello是一样的
g表示全局多用在匹配和搜索中我们先暂且不管。
m表示多行匹配
复制代码我们首先学会怎么描述规则即怎么写/ /之间的规则 对于某种特征一般有一下几种关系。 精确的。例如字符为hello的只需/hello/即可如果你接收HELLO,即/hello/i即可含有例如0-9之间范围加限定长度例如我需要匹配长度为4的0-9之间数字边界的例如 结尾为.js 或者开头为020-的电话格式对于我们是否写对了规则我们可以用test()方法试一试 test()好比一面照妖镜 var a/hello/i
console.log(a.test(heelo) //false
复制代码说明heelo和a不匹配是个假的。 下面分别说明上述几种 包含[],这种关系类似于数学之中排列组合例如[abc]代表a,b,c所能组成的各种组合let a/[0-9]/;
console.log(a.test(9)) //true
console.log(a.test(90)) //true
console.log(a.test(90)) //true
console.log(a.test(90SS)) //true
console.log(a.test(ABCD)) //falselet b/[0]/;
console.log(b.test(9)) //fasle
console.log(b.test(90)) //true
复制代码let a/[abc]/;
console.log(a.test(a)) //true
console.log(a.test(ac)) //true
console.log(a.test(abc)) //true
console.log(a.test(ABCD)) //false
复制代码let a/[*$]/;
console.log(a.test(*)) //true
console.log(a.test(*$)) //true
复制代码下面有几个常用的[]写法 1.[a-z] 包含字母let a/[a-z]/;console.log(a.test(a)) //trueconsole.log(a.test(Z)) //false 因为区分大小写console.log(a.test(abc)) //trueconsole.log(a.test(aS)) //true
2.[A-Za-z0-9]包含大写或小写字母或数字
复制代码单单使用[]是有局限的因为它能匹配的实在是太宽泛了只要包含即可。例如[a-z]对于字符a2也是符合的。要使得我们匹配更加精确正则表达式还有许多武器例如元字符。 元字符个人理解是一种限制规则来缩小匹配范围 一般来说有 限定属性以及长度。 \d 表示匹配一位整数 相反\D匹配一个非数字;\w 表示匹配一位英文单词 相反\W匹配一个非英文单词;\s 表示匹配一位空格 相反\S匹配一个非空格;...更多可以参考 http://www.runoob.com/jsref/jsref-obj-regexp.html
复制代码使用这个有什么用呢你已经知道了属性和长度,你可以去检测某些连在一起的特征例如你现在有一篇英文的文章我需要找到特征: 3位数字3位字母的部分标红 let txts23df12S456abx; /\d\d\d\w\w\w/let a/\d\d/;
console.log(a.test(1)) //false
console.log(a.test(12)) //true
console.log(a.test(1ac2)) //false 必须两个相连
let b/\s/;
console.log(b.test(my file.js)) //true 检测是否含有空格
复制代码限定位置 我们已经会使用属性加长度了但是有时候往往我们也需要位置的限定 。下面列举几个常用的元字符 $ 表示结尾 例如/js$/表示js不能再有任何字符串了空格也不行
let a/hello$/;
console.log(a.test(hello)) //true
console.log(a.test(hello world)) //false
console.log(a.test(hello )) //false
^ 表示开头 意思和 $ 相反 即使空格也不行,一般^和$成对使用可以构造出一些常用的正则表达式。
例如
由字母和数字组成长度不限的话可以表示为
/^[A-Za-z0-9]$/
let a/^[A-Za-z0-9]$/;
console.log(a.test(我a)) //false
console.log(a.test($123a)) //false
console.log(a.test(hello 23)) //fasle
console.log(a.test(hello23 )) //false
复制代码如果想要使得空格也可以匹配 可以使用\b \b表示边界可以为开头或者结尾 例如 hello,world let a/\bhi\b/;console.log(a.test(hi)) //trueconsole.log(a.test(him)) //false 后面有mconsole.log(a.test(hi m)) //true hi是单独的console.log(a.test(shi)) //false 前面有s
复制代码量词使用 例如我们想匹配连续三个数字,我们可以 /\d\d\d/
复制代码假如要匹配100个呢 写100个吗我们不可能手动写100个吧 我们有下面几个常用的表述 表示重复 n匹配任何包含至少一个 n 的字符串。 /abc/ 可以匹配 abc abcc abccccc abccccd*表示匹配任何包含至少0个或者一个 n 的字符串/abc*/ 可以匹配 ab abc abccc abccd 可以不包括c
复制代码{}使用 上述和*号范围都可以多到无限多。但是要表示具体多少个呢 我们可以使用{},这类似于数学里的表示范围[a,b]let a/^c{1,3}$/;
console.log(a.test(c)) //true
console.log(a.test(cc)) //true
console.log(a.test(ccc)) //true
console.log(a.test(cccc)) //false
其中{1,3}表示出现1-3个
{1,}表示匹配一个或者一个以上
{1}表示只匹配一个。
复制代码当然还有许多正则表达式规则了实在写不完了读者可以自行百度。完 转载于:https://juejin.im/post/5be983cc6fb9a049d2359488