正则表达式是啥来的
正则表达式是由一个字符序列形成的搜索模式,一种规则。
通俗来说,就是一个模板,接下来如果使用相关的函数都会以这个为模板,在主字符串中找到和模板一样形式的子字符串,
举个例子
var patt = /runoob/
我们搞了一个模板 runoob,也就是我们希望被查找的字符串中含有runoob这个字符串
语法(perl语言风格)
/正则表达式主体/修饰符(修饰符可写可不写)
如var patt = /runoob/i
意思是我希望主字符串中有子字符串runoob,并且执行忽略大小写区分的匹配。(后半句是修饰符i起到的作用)
(具体的各种修饰符可以在教程链接中找到)
js风格
var patt = new RegExp('runoob','i');
修饰符仍然是可写可不写,RegExp就是regular expression(正则表达式)
search() 方法(正则表达式为参数)
用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。
回忆一下kmp,这里就是字符串匹配,帮你在主字符串中找到你给的子字符串的起始下标(没找到就返回-1)
var str = "Visit Runoob!";
var n = str.search(/Runoob/i);//Output:6
search()方法(字符串为参数)
var str = "Visit Runoob!";
var n = str.search("Runoob");
replace()方法
replace() 方法 用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
可以想象是基于search()方法找到字符串然后替换成我们给的字符串
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<p>替换 "microsoft" 为 "Runoob" :</p>
<button onclick="myFunction()">点我</button>
<p id="demo">Visit Microsoft!</p>
<script>
function myFunction() {
var str = document.getElementById("demo").innerHTML;
var txt = str.replace(/microsoft/i,"Runoob");
document.getElementById("demo").innerHTML = txt;
}
</script>
</body>
</html>
replace实例:敏感词过滤
<body>
<textarea id="1" type="text" rows="10" cols="40"></textarea> <br>
<script>
function filter()
{
var old=document.getElementById('1');
var new1=document.getElementById('2');
var ifhave=/百度|网络|公司/g;
new1.value=old.value.replace(ifhave,'**')
}
</script>
<textarea id="2" onclick="filter()" type="text" rows="10" cols="40" ></textarea>
</body>
运行的页面中,只要我们输入了上面任意一个关键字,都会变成** ,这里的 | 就是或的意思
细节
\d+代表连续的一段数字,比如2,23,223(元字符和量词的搭配)
多注意修饰符g(所有符合的都选中)的使用,否则找到第一个符合的就停止了
[^a-z]表示选中字母a到z以外的字符, [^a-zA-Z]表示选中字母以外的字符
.*[a-z]表示选中连续的一段小写字母