正则表达式是用于匹配字符串中字符组合的模式。在js中,正则表达式也是对象,这些对象被用于RegExp的exec和test方法,以及String的match、replace、search和split方法 可以使用2种方法之一构建一个正则表达式 (1)正则表达式字面量 /pattern/flags flags:修饰符 const regex = /ab c/; (2)调用RegExp对象的构造函数 new RegExp(pattern [, flags]) let regex = new RegExp("ab c");
例1
var str = "Hi, do you 1234 your abc?"; stringObject.replace(regexp/substr,replacement) 返回值:一个新的字符串 var str1 = str.replace(/abc/,"123"); alert(str1);//"Hi, do you know your 123?" var str1 = str.replace(/d /,"asde"); //str1 = "Hi, do you asde your abc?";
例2、
(1)验证输入框的数值,只能输入1-10的数字(验证输入框的值是不是/^([1-9]|10)$/) function test(){ var text = document.getElementById("text").value; if(/^([1-9]|10)$/.test(text)){ alert("ok") }else{ alert("no") } } (2)验证输入框的值是否全为数字 function test() { var text = document.getElementById("text").value; if (/^[1-9] $/.test(text)) { // 验证的时候/^[1-9] $/不能写成/^[1-9]$/g,在文本替换的时候可以写成/^[1-9]$/g alert("ok") } else { alert("no") } } (3)替换输入框中的数字为空 function test() { var text = document.getElementById("text").value; 下面两种方法都行 document.getElementById("text").value = text.replace(/[1-9]/g,""); document.getElementById("text").value = text.replace(/[1-9] /,""); }
例3、
var str = "foobar"; var str1 = str.replace(/(foo)(bar)/,'$2 $1'); alert(str1);//bar foo
例4、
var str = "foo bar foo bar aaaaa"; var str1 = str.replace(/(foo) (bar) 1 2/,'lily'); alert(str1);//lily aaaaa
例5、 a{n}匹配了前面一个字符刚好发生了n次。
var str = "caaandy"; var str1 = str.replace(/a{2}/,'ll'); alert(str1);//cllandy
例6、
a{n,m}n 和 m 都是整数。匹配前面的字符至少n次,最多m次。如果 n 或者 m 的值是 0, 这个值被忽略。
var str = "caaandy"; var str1 = str.replace(/a{1,2}/,'kk'); alert(str1);//ckkandy
例7、
[xyz]一个字符集合。匹配方括号的中任意字符,包括转义序列。你可以使用破折号(-)来指定一个字符范围。对于点(.)和星号(*)这样的特殊符号在一个字符集中没有特殊的意义。他们不必进行转义,不过转义也是起作用的。
var str = "abcde"; var str1 = str.replace(/[abc]/,''); alert(str1);//bcde,在找到符合条件的匹配后不再进行匹配,如匹配a后,不再继续匹配,除非 加上修饰符g var str1 = str.replace(/[abc]/g,''); alert(str1);//de
例8、
[^xyz]一个反向字符集合。它匹配任何没有包含在方括号中的字符。你可以使用破折号 (-)来指定一个字符范围。任何普通字符在这里都是起作用的。
var str = "abcde"; var str1 = str.replace(/[^abc]/,'');//[^abc]也可写成[^a-c] alert(str1);//abce,在找到符合条件的匹配后不再进行匹配,如匹配a后,不再继续匹配,除非 加上修饰符g var str1 = str.replace(/[^abc]/g,''); alert(str1);//abc
例9、
b 匹配一个词的边界。一个词的边界就是一个词不被另外一个词跟随的位置或者不是另一个词汇字符前边的位置。注意,一个匹配的词的边界并不包含在匹配的内容中。换句话说,一个匹配的词的边界的内容的长度是0。(不要和[b]混淆了)
var str = "abc def abd"; var str1 = str.replace(/b/,'k'); alert(str1);//"kabc def abd" var str1 = str.replace(/b/g,'k'); console.log(str1);//"kabck kdefk kabdk" var str1 = str.replace(/ba/g,'k'); console.log(str1);//"kbc def kbd" var str1 = str.replace(/^a/g,'k'); console.log(str1);//"kbc def abd" ^与b的区别: ^是匹配字符串的开始,b是匹配单词的 边界
例10、
var myRe = /d(b )d/g; var myArray = myRe.exec("cdbbdbsbz"); console.log("The value of lastIndex is " myRe.lastIndex);//The value of lastIndex is 5 var myArray = /d(b )d/g.exec("cdbbdbsbz"); //当发生/d(b )d/g使用两个不同状态的正则表达式对象,lastIndex属性会得到不同的值。如果你需要访问一个正则表达式的属性,则需要创建一个对象初始化生成器,你应该首先把它赋值给一个变量。 console.log("The value of lastIndex is " /d(b )d/g.lastIndex);//The value of lastIndex is 0
(adsbygoogle = window.adsbygoogle || []).push({});