目录
var str='hello world';
var reg1=new RegExp('o','gi');
参数1:要匹配的字符(不能有空格)
参数2:匹配模式(常用g(全局匹配),i(忽略大小写))
var reg2=/o/gi;
console.log(reg1.test(str));
console.log(reg1.exec(str));
//返回一个数组:["o",index:4,input:"hello world",groups:undefined]
//0:"o" 表示第一个与正则表达式相匹配的值
//groups:undefined
//index:4 index属性声明的是匹配文本的第一个字符的位置
//input:"hello world" input属性存放的是被检索的字符串string
//length:1
//__proto__:Array
console.log(str.match(reg1));
var reg=/javascript/i;
var str="hello Javascript Javascript Javascript";
console.log(str.search(reg));
var reg1=/javascript/i;
var reg2=/javascript/gi;
var str="hello Javascript Javascript Javascript";
console.log(str.replace(reg1,"js"));
//hello js Javascript Javascript
console.log(str.replace(reg2,"js"));
//hello js js js
var reg1=/cr/i;
var str="hello Javascript";
var res=str.split(reg1);
console.log(res);
\d | 0-9的任意数字 | \d\d将匹配72,但不匹配aa或7a |
\D | 任何非数字字符 | \D\D\D将匹配abc,但不匹配123或8ef |
\w | 任何单词字符,即A-Z,a-z,0-9以及下划线等字符 | \w\w\w\w匹配Ab_2,但不匹配&$%*或者Ab_@ |
\W | 任何非单词字符 | \W匹配@,但不匹配a |
\s | 任何空白字符 | 与制表符、回车符、换页符或竖杠空格匹配 |
\S | 任何非空白字符 | \S匹配A,但不匹配制表符 |
. | 除换行符(\n)外的任意单个字符 | .匹配a或者4,或者@ |
[...] | 匹配位于方括号之内的任何一个字符,[a-z]将匹配a-z范围内的任何字符 | [abc]匹配a、b、c,但不匹配任何其他字符 |
[^...] | 匹配除方括号内的字符之外的任何字符 | [^abc]将匹配除了a、b、c外的任何字符,[^a-z]将匹配除了a-z范围之外的任何字符 |
{n} | 前一项出现n次 | x{2}与xx匹配 |
{n,} | 前一项出现n次,或者n次以上 | x{2,}匹配xx,xxx,xxxx,xxxxx等 |
{n,m} | 前一项至少出现n次,最多出现m次 | x{2,4}匹配xx,xxx,xxxx |
? | 前一项出现0次或1次,等同于{0,1} | x?匹配空串或者x |
+ | 前一项出现1次或多次 | x+匹配x、xx、xxx、xxxx等 |
* | 前一项出现0次或多次 | x*匹配空串、或者x、xx、xxx等 |
\b | 匹配单词分界位置,即单词字符与非单词字符之间的位置 |
\B | 匹配非单词分界位置 |
^ | 匹配输入的开始。如果多行标志被设置为 true,那么也匹配换行符后紧跟的位置。例如,/^A/?并不会匹配 "an A" 中的 ‘A‘,但是会匹配 "An E" 中的 ‘A‘。当 ‘^‘ 作为第一个字符出现在一个字符集合模式时,它将会有不同的含义。 |
$ | 匹配输入的结束。如果多行标示被设置为 true,那么也匹配换行符前的位置。例如,/t$/?并不会匹配 "eater" 中的 ‘t‘,但是会匹配 "eat" 中的 ‘t‘。 |
? | 如果紧跟在任何量词 *、 +、? 或 {} 的后面,将会使量词变为非贪婪(匹配尽量少的字符),和缺省使用的贪婪模式(匹配尽可能多的字符)正好相反。例如,对 "123abc" 使用?/\d+/?将会匹配?"123",而使用?/\d+?/?则只会匹配到 "1"。还用于先行断言中,如本表的?x(?=y)?和?x(?!y)?条目所述。 |
(x) | 模式?/(foo) (bar) \1 \2/?中的 ‘(foo)‘ 和 ‘(bar)‘ 匹配并记住字符串 "foo bar foo bar" 中前两个单词。模式中的?\1?和?\2?表示第一个和第二个被捕获括号匹配的子字符串,即?foo?和?bar,匹配了原字符串中的后两个单词。注意?\1、\2、...、\n?是用在正则表达式的匹配环节,详情可以参阅后文的?\n?条目。而在正则表达式的替换环节,则要使用像?$1、$2、...、$n?这样的语法,例如,‘bar foo‘.replace(/(...) (...)/, ‘$2 $1‘)。{{(x) 模式?/(foo) (bar) \1 \2/?中的 ‘(foo)‘ 和 ‘(bar)‘ 匹配并记住字符串 "foo bar foo bar" 中前两个单词。模式中的?\1?和?\2?表示第一个和第二个被捕获括号匹配的子字符串,即?foo?和?bar,匹配了原字符串中的后两个单词。注意?\1、\2、...、\n?是用在正则表达式的匹配环节,详情可以参阅后文的?\n?条目。而在正则表达式的替换环节,则要使用像?$1、$2、...、$n?这样的语法,例如,‘bar foo‘.replace(/(...) (...)/, ‘$2 $1‘)。$&?表示整个用于匹配的原字符串。(uploading...)}}?表示整个用于匹配的原字符串。 |
(?:x) | 匹配 ‘x‘ 但是不记住匹配项。这种括号叫作非捕获括号,使得你能够定义与正则表达式运算符一起使用的子表达式。看看这个例子?/(?:foo){1,2}/。如果表达式是?/foo{1,2}/,{1,2}?将只应用于?‘foo‘?的最后一个字符 ‘o‘。如果使用非捕获括号,则?{1,2}?会应用于整个 ‘foo‘?单词。 |
x(?=y) | 匹配‘x‘仅仅当‘x‘后面跟着‘y‘.这种叫做先行断言。例如,/Jack(?=Sprat)/会匹配到‘Jack‘仅仅当它后面跟着‘Sprat‘。/Jack(?=Sprat |
(?<=y)x | 例如,/(?<=Jack)Sprat/会匹配到‘ Sprat ‘仅仅当它前面是‘ Jack ‘。/(?<=Jack |
x(?!y) | 仅仅当‘x‘后面不跟着‘y‘时匹配‘x‘,这被称为正向否定查找。例如,仅仅当这个数字后面没有跟小数点的时候,/\d+(?!.)/ 匹配一个数字。正则表达式/\d+(?!.)/.exec("3.141")匹配‘141’而不是‘3.141’ |
(?<!y)x | 仅仅当‘x‘前面不是‘y‘时匹配‘x‘,这被称为反向否定查找。例如, 仅仅当这个数字前面没有负号的时候,/(?<!-)\d+/?匹配一个数字。/(?<!-)\d+/.exec(‘3‘)?匹配到?"3"./(?<!-)\d+/.exec(‘-3‘)?因为这个数字前有负号,所以没有匹配到。 |
x|y | 匹配‘x’或者‘y’。例如,/green |
var str1="Hello World! let's look at boundaries said 007.";
var reg1=/\b/gi;
var res=str1.replace(reg1,"|");
console.log(res);
//|Hello| |World|! |let|'|s| |look| |at| |boundaries| |said| |007|.
//H|e|l|l|o W|o|r|l|d!| l|e|t's l|o|o|k a|t b|o|u|n|d|a|r|i|e|s s|a|i|d 0|0|7.|
let str1=`dhvwv5486`;
let str2=`8599844`;
let reg=new RegExp(`[a-zA-z]`,`gi`);
console.log(str1.search(reg));//0
console.log(str2.search(reg));//-1
let str=" Hello World";
let reg=new RegExp(`\\s`);
console.log(str.replace(reg,""));
//用户账户名只能由大小写字母、数字和下划线组成
//且不允许以数字和下划线开头,用户名限长9个字符
var userName=prompt("请输入用户名","username");
function check(userName){
let reg=/^[a-zA-z]\w{0,9}$/;
if(reg.test(userName)&&userName.length<=9){
return true;
}else{
return false;
}
}
alert(check(userName));
//手机号码以1开头
function check(TelNum){
let reg=new RegExp(`^1\\d{10}$`);
if(reg.test(TelNum)){
return true;
}else{
return false;
}
}
//国际号码:“+”后跟1到3个数字
//本地区号:2-5个数字,有时带括号
//实际的用户号码:3-10个数字,有时带括号
//分机号码:2-5个数字,其前面是x、xtn、extn、pax、pbx或extension,有时带括号
//例子:+1(123)1234567 +1123123456 +44(123)1234567ext123
var res=prompt("","");
var reg=/^(\+\d{1,3} ?)?(\(?\d{2,5}\)?)?\(?\d{3,10}\)?\(?(x|xtn|extn|pax|pbx|extension)?\)?\d{2,5}?$/gi;
alert(reg.test(res));
//邮箱组成:第一部分@第二部分
//第一部分:由字母、数字、下划线、短线、点号组成,首字母必须是字母或数字
//第二部分:由字母、数字、短线、域名后缀(.cn、.com、.net)组成,
//最后的.com和.cn是可以互换位置的,然后也可以只有.com没有.cn或只有.cn没有.com
var res=prompt("","");
var reg=/^[a-zA-Z0-9]{1}[\w\.\-]+@[\w\-]+\.(com|cn|net)?\.?(com|cn|net)?$/;
alert(reg.test(res));
有九个用于存储捕获组的构造函数属性。访问这些属性的语法是RegExp.$1、RegExp.$2...分别用于储存第一一直到第九个匹配的捕获组。在调用exec()或test()方法时,这些属性会被自动填充。然后,就可以像下面这样使用:
var text="this has benn a short summer";
var pattern=/(..)or(.)/g;
if(pattern.test(text)){
console.log(RegExp.$1);//sh
console.log(RegExp.$2);//t
}
即使test()方法只返回一个布尔值,但RegExp构造函数的属性$1和$2也会被匹配响应捕获组的字符串自动填充。
[\u4e00-\u9fa5]
||或者
[^\x00-\xff]
原文:https://www.cnblogs.com/Syinho/p/12422588.html