<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>正则表达式(火星文)</title>
</head>
<body>
<input type="text" id="myText" placeholder="你要发言的内容">
<button onclick="send()">发送消息</button>
<textarea id="myArea" cols="30" rows="10"></textarea>
<script>
// 正则表达式:
// 它是一个功能非常非常非常非常非常强大的字符串匹配功能
// 有了它你就可以指定自己的规则, 然后去判断某个字符串是否符合你的规则(比如验证邮箱, 账号, 密码, 电话, 身份证号 等格式)
function send(){
var str = document.getElementById("myText").value;
var reg = /[中国人民很棒]/g;
// 字符串match方法, 里面传入一个正则表达式, 得到正则匹配出来的结果, 结果是一个数组
// var resultStr = str.match(reg);
// 字符串replace方法, 第一个参数不光可以参数一个固定字符, 还可以传入正则表达式来匹配, 字符串里的内容
var resultStr = str.replace(reg, "*");
document.getElementById("myArea").value = resultStr;
}
// 正则表达式 符号的意义
/*
* [] 匹配里面任意一个字符
* [1234567890] [0-9] [\d]
* [abc] [a-z]
* - 代表一个范围
* 字符都是用ASCII码来寻找的
* */
var str2 = "12345abc67";
var reg2 = /[A-z]/g;
console.log(str2.match(reg2)); // ["a", "b", "c"]
// \ 斜杠的意义 (转义)
var str3 = "我是/haha";
var reg3 = /\//g;
console.log(str3.match(reg3)); // ["/"]
// ^ 房子盖 匹配 以。。。开头
var str4 = "a201541030209";
var reg4 = /^[a-z]/g; // 以a-z任意一个字符作为整个字符串的开头
console.log(str4.match(reg4)); // ["a"]
// [^0-9] 匹配 除了 0-9之外
// ^如果在[ ]内 比如 [^0-9] 意思是除了数字之外
var str44 = '1232我'
var reg44 = /[^0-9]/g
console.log(str44.match(reg44)) // ["我"]
// $ 以。。。结束
var str5 = "小花好好学习8";
var reg5 = /[0-9]$/g;
console.log(str5.match(reg5)); // ["8"]
// .点 代表匹配 任意一个字符(占位符) 除了\n以外
// * 代表匹配 前面的表达式 1次 或 多次
// 练习:要求匹配以abc任意一个开头,并且 XYZ任意一个结尾的正则表达式
var str6 = "c大大很棒棒Z";
var reg6 = /^[abc].*[XYZ]$/g;
console.log(str6.match(reg6)); // ["c大大很棒棒Z"]
// {n} 代表匹配 前面表达式 n次
// {n, m} 代表匹配前面表达式 最少n次 最多m次
// {n, } 代表匹配前面表达式 最少n次
// { , m} 代表匹配前面表达式 最多m次
var str7 = "acd12535";
var reg7 = /^[a-z]{3}/g; // 匹配a-z开头字符3次 (因为有^ 必须是开头连续3个如果被打断, 则获取不到)
var reg7_1 = /^[a-z]{1,3}/g; // 比如以字符开头,至少1次最多3次匹配
console.log(str7.match(reg7_1)); // ["acd"]
// 例:判断用户输入的是否是电话号码
var str8 = "13040507890";
var reg8 = /^1[345678][\d]{9}$/;
console.log(str8.match(reg8)); // ["13040507890", index: 0, input: "13040507890", groups: undefined]
// 判断邮箱格式 是否正确
var str9 = "lidongxu@123.com";
var reg9 = /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/;
console.log(str9.match(reg9)); // ["lidongxu@123.com", "lidongxu", "123", "com", index: 0, input: "lidongxu@123.com", groups: undefined]
// 判断身份证格式是否正确
var str10 = "21100919811130213131";
var reg10 = /^\d{15}$|^\d{18}$|^\d{17}(\d|x|X)$/g;
console.log(str10.match(reg10)); // null
var str11 = "<html><head><title>我是title</title></head><body>" +
"<ul><li>1</li><li>2</li><li>3</li><li>4</li></ul></body></html>";
var reg11 = /<li>(\d)??<\/li>/g;
console.log(str11.match(reg11)); // ["<li>1</li>", "<li>2</li>", "<li>3</li>", "<li>4</li>"]
</script>
</body>
</html>
*************************************************************************
JavaScript 正则表达式 g、i、m分别代表的意思
g:表示全局(global)模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时立即 停止;
i:表示不区分大小写(case-insensitive)模式,即在确定匹配项时忽略模式与字符串的大小写;
m:表示多行(multiline)模式,即在到达一行文本末尾时还会继续查找下一行中是否存在与模 式匹配的项。 *************************************************************************
. 任何字符 a? a一次或一次也没有 a* a零次或多次 a+ a一次或多次 a{n}? a恰好 n 次 a{n,}? a至少n次 a{n,m}? a至少n次,但是不超过m次 [abc] a、b 或 c(简单类) [^abc] 任何字符,除了 a、b 或 c(否定) [a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围) [a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集) [a-z&&[def]] d、e 或 f(交集) [a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去) [a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去) \d 数字 或者 [0-9] \D 非数字 或者 [^0-9] \s 空白字符 或者 [ \t\n\x0B\f\r] \S 非空白字符 或者 [^\s] \w 单词字符 或者 [a-zA-Z_0-9] \W 非单词字符 或者 [^\w] ^ 行的开头 ^如果在[ ]内 比如 [^\d] 意思是除了数字之外 $ 行的结尾 \b 单词边界 \B 非单词边界 \A 输入的开头 \G 上一个匹配的结尾 \Z 输入的结尾,仅用于最后的结束符(如果有的话) \z 输入的结尾