1. Coincidencia de números
isNAN
Sólo válido para números
const hd='abc123bcd';
let nums=[...hd].filter(a=>!Number.isNaN(parseInt(a))).join('')
\d
Caracteres de escape para hacer coincidir números
console.log(hd.match(/\d/g).join(''));
2. Creación literal de expresiones regulares.
test
Compruebe si contiene
const hd="houdun.com"
console.log(/@/.test(hd)); //hd里面是否包含@ 返回false
eval
expresión de prueba
let a="u"
console.log(eval(`/${
a}/`).test(hd)); // true
3. Utilice objetos para crear reglas regulares.
g
Indica una coincidencia globali
no entre mayúsculas y minúsculas\w
Emparejar letras o números o guiones bajosRegExp
Forma habitual de crear objetos.
// 创建对象的方式找u
const hd='www.baidu.com'
let a='u'
let reg=new RegExp(a,'g')
console.log(reg.test(hd));
- Resaltado dinámico de cadenas coincidentes (recuperación)
<div>www.baidu.con</div>
<script>
const con = prompt('请输入要的动态匹配的字符串')
const reg = new RegExp(con, 'g')
const div = document.querySelector('div')
div.innerHTML= div.innerHTML.replace(reg, search => {
console.log(search);
return `<span style="color:red">${
search}</span>`
})
<script>
4. Uso de selectores
|
Representa el selector, anidados en ambos lados están las expresiones.
let hd="www.baidu.com"
console.log(/a|aaab/.test(hd)); // true
const tel='020-9999999'
// \d{7,8} // 表示找到7-8位以上数字
console.log(/(010|020)\-\d{7,8}/.test(tel)); // true
5. Uso de grupos atómicos y tablas atómicas.
()
Representa la tabla de átomos.[]
La diferencia entre indicar el grupo atómico
注意
[]
y es que cada carácter que contiene puede coincidir, pero los caracteres en se usan como un todo y también se pueden separar por | como expresiones()
[]
()
let reg = /[123456]/;
let hd = "123123"
console.log(hd.match(reg)); // 1
let reg = /(1236|456)/; // 当表达式进行匹配(前面的不符合规则)
let hd = "123456"
console.log(hd.match(reg)); // 456
6. Personajes de escape
\d
representa un número [0-9]^h
El carácter de límite de restricción indica que comienza con h+
representa uno o más\w
Representa cualquier letra o guión bajo..
Dos significados del punto
// 1. 除换行外任何字符
// 2. 普通点(要进行转义“\.”)
const price=23.34 // 注意边界的限定
console.log(/\d+\.\d+/.test(price));
Usar escapes en objetos
const prices=12.34
const reg=new RegExp("\\d+\\.\\d+")
console.log(reg.test(prices));
7. Restricciones de límites de caracteres (limitación de intervalo)
^
límite de inicio límite$
límite final límite
const hd="hd333abc3"
console.log(/\d/.test(hd)); // true
// 限制开始必须为数字
console.log(/^\d/.test(hd)); //false
// 限制开始与结束必须为数字
console.log(/\d$/.test(hd)); // true
// 1. 限定英文字母3-6位 // 至少3位(加结束边界符有上线)
const halist='abcccccccccc'
console.log(/^[a-z]{3,6}$/.test(halist)); //false
7.1 Límites iniciales y finales para números e intervalos de letras
expresión regular | Rangos |
---|---|
[0-9] | 0~9 |
[1-9][0-9] | 10~99 |
1[0-9]{2} | 100~199 |
2[0-4][0-9] | 200~249 |
25[0-5] | 250~255 |
[1-9][0-9][0-9]{0,2} | 10~9999 |
[1-5][0-9]{4} | 10000~59999 |
const halist='11'
// 开始边界1-9结束边界0-9 取值范围为[1-99]
console.log(/^[1-9][0-9]{0,1}$/.test(halist)); //true
// 说明 ab{1,3},就表示a,后面紧跟的b出现最少1次最多3次
let t="1"
console.log(/^([1-9]|[1-9][0-9])$/.test(t)); // 与上述相等
let s="cde"
// 表示这一段是abc、bcd、cde三者之一均可,顺序也必须一致
console.log(/^(abc|bcd|cde)$/.test(s)); // true
8. Metacaracteres
d
Números coincidentesD
Coincide con todo excepto los números.
const hd = '010-1999999'
console.log(/\d{3}-\d{6,9}/g.test(hd)); // true
const hdList = 'ABCD 20210'
console.log(/\D+/.test(hdList)); // true
^
Empezar con algo^1
significa empezar con 1, etc.- Usado en un grupo atómico para indicar algo distinto de comenzar con algo.
/[^ -\d:,] 除了以 - \d : ,开头的都匹配
const p=`张三:010-999,
李四:020-666`
console.log(p.match(/[^-\d:,\s]+/g)); // ['张三', '李四']
\s
Coincide con espacios en blanco (incluidos los espacios en blanco)\S
excepto en blanco
console.log(/\s/.test(' ')); // true
console.log(/\S/.test(' ')); // false(只要有一个不是空白就是true)
9. metacaracteres w y W
\w
Representa un subrayado alfanumérico.\W
Indica excepto alfanumérico y guión bajo
const hd='abc123_-'
console.log(hd.match(/\w+/g)); // ['abc123_']
// 1. 练习匹配邮箱
const email='[email protected]'
console.log(email.match(/\w+\@+\w+\.+\w+/g)); // 匹配邮箱
// 2. 做限制匹配邮箱
const emails='&&&[email protected]'
console.log(emails.match(/^\w+\@+\w+\.+\w+$/g)); // 做开头与结尾的限制
10. Carácter de punto
.
Representa cualquier carácter excepto los saltos de línea.
const hd = 'houduan.com'
console.log(hd.match(/.+/gi)); //['houduan.com']
// 匹配网址中 .的转义
const url='https://www.baidu.com'
console.log(url.match(/https?:\/\/\w+\.\w+.\w+/));
// 空格的两种匹配方式
const tel='010 - 1999999'
console.log(tel.match(/\d+ - \d{3,9}/));
// 或
console.log(tel.match(/\d+\s-\s\d{3,9}/));
11 coincide con todos los personajes
[]
Los datos colocados en el grupo atómico son opcionales.[\s\S] [\d\D]
Puede coincidir con todos los personajes
const hd='ab'
console.log(hd.match(/[ab,,,xxx]+/g));
12. modificadores g e i
i
Indica que no se distinguen entre mayúsculas y minúsculasg
partido global
const hd='HuUadd'
console.log(hd.match(/u/gi)); // ['u','U']
// 大小写U替换成@
console.log(hd.replace(/u/gi,'@')); // H@@add
13. m modificador de coincidencia
\s
blanco*
Indica 0 o más\d
número.
Cualquier carácter excepto nueva líneam
Convertir a una línea y procesar por separado
let hd = `
#1 js,200元 #
#2 php,300元 #
#9 houdunren.com #测试
#3 node.js,180 #
`
console.log(hd.match(/\s*#\d+\s+.+\s+#\s+/g));
const data = (hd.match(/^\s*#\d+\s+.+\s+#$/gm)).map(v => {
v = v.replace(/\s*#\d+\s*/, '').replace(/#/, '')
let [name, price] = v.split(',')
return {
name, price }
})
console.log(data);
// [
// { name: 'js', price: '200元 ' },
// { name: 'php', price: '300元 ' },
// { name: 'node.js', price: '180 ' }
// ]
14. Hanzi y los atributos de los personajes.
[L]
El atributo L demuestra que es una letra.[P]
Coincidir sólo con caracteres de puntuación[sc=Han]
// Emparejar chinou
Coincidencia de bytes amplios, solo la mitad de la coincidencia
注意
Compruebe si las letras deben combinarse con u
const hd='houduanren2010,正则'
console.log(hd.match(/\p{L}/gu)); //['h', 'o', 'u', 'd','u', 'a', 'n', 'r','e', 'n', '正', '则']
console.log(hd.match(/\p{P}/gu)); // [',']
console.log(hd.match(/\p{sc=Han}/gu)); // [ '正', '则' ]
let str="SY"
console.log(str.match(/[SY]/u)); // S
15. Uso de último índice
lastIndex
Registre el subíndice de la última búsqueda.- Este atributo se puede utilizar para hacer coincidir e insertar cada dato en una nueva matriz.
let hd = "houdunren";
// console.log(hd.match(/\w/g));
let reg = /\w/g;
console.log(reg.lastIndex); // 0
console.log(reg.exec(hd)); //["h"]
console.log(reg.lastIndex); // 1
console.log(reg.exec(hd)); //['0']
const data=[]
while ((res = reg.exec(hd))) {
data.push(res[0])
console.log(res);
}
console.log(data); // ["u","d"....]
16. Modo y eficiente
y
Comparación de coincidencia de patrones y patrones normales
const hd = 'udunren'
const reg = /u/g
console.log(reg.exec(hd[0])); // ['u']
console.log(reg.lastIndex); // 1
console.log(reg.exec(hd[0]));
console.log(reg.lastIndex); // 3
// y模式 如何匹配的不符合就返回null
console.log('xxxxxxxxxxxxxx测试');
const hy='udunren'
const regs=/u/y
console.log(regs.exec(hy));
console.log(regs.lastIndex); // 1
console.log(regs.exec(hy));
console.log(regs.lastIndex); // 1
y
Número QQ de búsqueda de texto completo en modo
let hdqq = `模式全文检索QQ号:123456789,2836879147,846212934全文检索`
let regs = /(\d+),?/y
regs.lastIndex = 10 // 去除数字前的字符
// console.log(regs.exec(hdqq)); // 检索123456789
// console.log(regs.exec(hdqq));
// console.log(regs.exec(hdqq));
let qq = []
while ((res = regs.exec(hdqq))) qq.push(res[0])
console.log(qq); // [ '123456789,', '2836879147,', '846212934' ]
17. tabla atómica
[/,.]
Indica la existencia o relación de los personajes internos (todos pueden coincidir)
let hd = 'qianduanrenu'
console.log(hd.match(/[ur]/g)); // [ 'u', 'r', 'u' ]
let tel ='2023-0-9'
// let reg=/\d{3}\-\d{1}\-\d{1}/
let reg=/^\d{4}([-\/])\d{1}[-\/]\d{1}$/
console.log(tel.match(reg));
18. Coincidencia de intervalos
<input type="text" name="username">
<script>
// [0-9] 区间匹配
// + 号的贪婪匹配1到多个
let hd = "2010"
console.log(hd.match(/[0-9]+/g));
let input =document.querySelector(`[name="username"]`)
input.addEventListener('keyup',function(){
if (this.value.match(/\w+/)) {
this.value=''
}
console.log(this.value.match(/\w+/));
})
</script>
19. Excluir coincidencias
^
Usado en[]
la tabla de átomos (es decir, excepto)-
Debe usar escape
let hd='houdunren.com'
console.log(hd.match(/[ue]/gi)); // [ 'u', 'u', 'e' ]
// 在原子表中加^符号 , 表示排除
console.log(hd.match(/[^ue]/gi)); // ['h', 'o', 'd', 'n','r', 'n', '.', 'c','o', 'm']
// 匹配中文
let en='张三:127.0.0.1,历史127'
console.log(en.match(/[^\d,\-:.]+/g));
20. Los caracteres del grupo atómico no se analizan.
()
Grupo atómico, uno solo()
colocado afuera es un grupo atómico
let hd='(123456)+.'
let hds='(123456)+.'
console.log(hds.match(/()/gi)); // 原子组匹配空
console.log(hds.match(/[()]/gi)); // [ '(', ')' ]
21. Utilice la tabla atómica para unir todos
s
Seguido de s para ignorar las nuevas líneas
let hd = `
houdunren
hdcms
`;
console.log(hd.match(/.+/gs));
// [\s\S] 所有内容 [\d\D] 所有内容
console.log(hd.match(/[\s\S]+/)[0]);
22. Utilice expresiones regulares para manipular DOM
()
grupo atómico[]
tabla atómica\1
Solo toma la tabla atómica anterior.*
Coincide con 0 o más
<!-- 1. 匹配h元素替换成空 -->
<p>ceshi</p>
<h2>123456</h2>
<h2>123456</h2>
<script>
let body = document.body
let reg=/<(h[1-6])>[\s\S]*<\/\1>/gi
body.innerHTML=body.innerHTML.replace(reg,'')
</script>
23. Uso de grupos atómicos de verificación de correo electrónico.
<input type="text" value="[email protected]" name="name">
<script>
const tyName=document.querySelector("[name='name']").value
// console.log(tyName);
// const reg=/^\w+\@\w+\.\w+/g
// console.log(tyName.match(reg));
// 1. 改进 [email protected] ()// 原子表包含|表示或
// const reg=/^[\w-]+@[\w-]+\.(com|cn|org|net|cc)$/g
// console.log(tyName.match(reg));
// 2.匹配 [email protected] // 新浪正则
// let tyName= ''
const reg=/^[\w-]+@([\w-]+\.)+(com|cn|org|cc)$/i
console.log(tyName.match(reg));
</script>
24. Los grupos atómicos completan la función de reemplazo.
<script>
let hd = `
<h1>houdunren</h1>
<span>后盾人</span>
<h2>hdcms</h2>
`;
// 1. 把h标签替换成P标签
const reg = /<(h[1-6])>([\s\S]+)<\/\1>/gi
// 2. 注意这个$后面跟的数字表示第几个原子组里的数据
// console.log(hd.replace(reg, `<p>$2<p>`));
// 函数形式
hd.replace(reg,(p0,p1,p2)=>{
console.log(p0) // 表示<h1>houdunren</h1>
console.log(p1); //h1
console.log(p2); // 内容 houdunren
console.log(`<p>${
p2}<p>`);
})
</script>
25. Agrupación anidada y agrupación no registrada
?:
Se utiliza en un grupo atómico para indicar que no hay registro.
let hd = `
https://www.houdunren.com
http://houdunwang.com
https://hdcms.com
`;
let reg=/https?:\/\/\w+\.\w+\.(com|cn|org|cc)/gi
console.log(hd.match(reg));
let reg=/https?:\/\/((?:\w+\.)?\w+\.(?:com|cn|cc|org))/gi
let hd = `
https://www.houdunren.com
http://houdunwang.com
https://hdcms.com
`;
let reg=/https?:\/\/((?:\w+\.)?\w+\.(?:com|cn|cc|org))/gi
let urls=[]
while((res=reg.exec(hd))){
urls.push(res[1])
}
console.log(urls);
26. Múltiples coincidencias repetidas y grupos atómicos.
let hd="hdddddhd"
// 1. 在这里使用原子组 , 表示里面的内容是一个整体
console.log(hd.match(/(hd)+/gi)); // [ 'hd', 'hd' ]
let tel ='0122-9999999'
console.log(tel.match(/^0\d{2,3}\-\d{2,6}/));
27. Verificación del nombre de usuario del sitio web
<input type="text" name="username" />
<script>
document.querySelector(`[name="username"]`).addEventListener("keyup", e => {
const value = e.target.value;
let reg = /^[a-z][\w-]{2,7}$/i; // 以字母开头,且字母数字下划线2位到7位结束
console.log(reg.test(value));
});
</script>
28. Utilice expresiones regulares para completar la verificación de contraseña en lotes
- Utilice expresiones regulares en lotes en forma de matrices.
<input type="text" name="password" value="" />
<script>
let input=document.querySelector("[name='password']")
input.addEventListener("keyup",(e)=>{
const value = e.target.value;
// 1. 使用数组的形式批量使用正则
const regs = [/^[a-z0-9]{5,10}$/i, /[A-Z]/, /[0-9]/];
let start=regs.every(e=>e.test(value))
console.log(start ? '正确' : '错误');
})
</script>
29. Sin avaricia
?
Indica 0 o 1{2,10}?
El signo de interrogación utilizado aquí significa que sólo se pueden hacer coincidir dos.
let hd="hdddd"
console.log(hd.match(/hd{2,10}?/g)); // ["hdd"]
30. La coincidencia de etiquetas prohíbe la codicia
<body>
<main>
<span>houdunwang</span>
<span>hdcms.com</span>
<span>houdunren.com</span>
</main>
<script>
// 1.匹配span 换成h4标签并把内容描红
const main = document.querySelector('main')
// ? 禁止贪婪 表示先在第一个标签进行匹配
const reg = /<span>([\s\S]+?)<\/span>/gi
main.innerHTML = main.innerHTML.replace(reg, (p1, p2) => {
return `<h4 style="color:red">${
p2}</h4>`
})
</script>
</body>
31. Utilice matchAll para completar la coincidencia global
matchAll
Coincide con un objeto iterable<\/\1>
Extraer'\1'
coincidencia de representación de contenido(h[1-6])
<body>
<!-- 1. 获取标签里面的数据 -->
<h1>houdunren.com</h1>
<h2>hdcms.com</h2>
<h1>测试</h1>
</body>
<script>
let reg = /<(h[1-6])>([\s\S]+?)<\/\1>/gi
const body=document.body
console.dir(body.innerHTML.match(reg)) //"h1>houdunren.com</h1>\n\t<h2>hdcms.com</h2>\n\t<h1>后盾人</h1>"
// 注意 matchAll 匹配的是可迭代的对象
const hd=body.innerHTML.matchAll(reg)
console.log(hd); // 可迭代对象
let contents=[]
for (const iterator of hd) {
console.log(iterator);
contents.push(iterator[2])
}
console.table(contents);
</script>
32. Compatible con el método matchAll para navegadores de versiones inferiores
<body>
<h1>houdunren.com</h1>
<h2>hdcms.com</h2>
<h1>测试</h1>
</body>
<script>
String.prototype.matchAll = function (reg) {
let res = this.match(reg);
if (res) {
let str = this.replace(res[0], "^".repeat(res[0].length));
let match = str.matchAll(reg) || [];
return [res, ...match];
}
};
let body = document.querySelector("body").innerHTML;
let search = body.matchAll(/<(h[1-6])>([\s\S]+?)<\/\1>/i);
console.log(search);
</script>
33. Utilice exec para completar la coincidencia global
<body>
<h1>houdunren.com</h1>
<h2>hdcms.com</h2>
<h1>测试</h1>
</body>
<script>
let reg = /<(h[1-6])>[\s\S]+?(\/\1)/gi
const body = document.body.innerHTML
// console.log(reg.exec(body));
// console.log(reg.exec(body));
let contents = []
while ((res = reg.exec(body))) {
contents.push(res)
}
console.log(contents);
// 1.封装函数的方式进行匹配
function search(string,reg) {
let result = [];
while ((res = reg.exec(string))) {
result.push(res);
}
return result;
}
let content=search(document.body.innerHTML, /<(h[1-6])>[\s\S]+?(\/\1)/gi)
console.dir(content);
</script>
34. Método regular de cadena
search方法
Devuelve el subíndice cuando el carácter coincide correctamente.match
Devuelve una matriz de todos los caracteres coincidentes.
let search='hd123hd'
console.log(search.search(/\h/gi)); // 0
let hd = `
https://hdcms.com
http://www.sina.com.cn
https://www.houdunren.com
`;
let reg = /https?:\/\/(\w+\.)?(\w+\.)+(com|cn|org|cc)/gi;
console.dir(hd.match(reg));
matchAll
Devolver datos iterables
let hd = `
https://hdcms.com
http://www.sina.com.cn
https://www.houdunren.com
`;
let reg = /https?:\/\/(?:\w+\.)?(?:\w+\.)+(?:com|cn|org|cc)/gi;
for (const iterator of hd.matchAll(reg)) {
console.log(iterator);
}
let hdcms = "2020/09/12";
console.log(hdcms.split(/[-\/]/));
35. Reemplazo del símbolo $ en expresiones regulares
// 1. $` 替换内容前面的字符
// 2. $' 替换内容后面的字符
// 3. $& 匹配自己本身的内容
const tel="2023/2/18"
// / 替换成-
console.log(tel.replace(/\//g,"-")); // 2023-2-18
const tels="(010)999999 (202)999999999"
const reg=/\((\d{3,4})\)(\d{6,12})/g
// 1. $1 表示010 202 这个组
// 2. $2表示999...这个组
console.log(tels.replace(reg, '$1-$2')); // 010-999999 202-999999999
const con="=测试="
// 1. 在测试前后分别加上=
console.log(con.replace(/测试/,"$`")); // === ,把测试替换成=
console.log(con.replace(/测试/,'$&')); // =测试= , 匹配自己本身
console.log(con.replace(/测试/,'$`$&$`'));
36. Uso de grupos atómicos en proyectos.
- Agregue s a http, agregue www sin www para que coincida solo con hdcms y personas houdun
<main>
<a style="color:red" href="http://www.hdcms.com">
开源系统
</a>
<a id="l1" href="http://houdunren.com">后盾人</a>
<a href="http://yahoo.com">雅虎</a>
<h4>http://www.hdcms.com</h4>
</main>
<script>
// 1. 给http加上s , 没有www加上www 只匹配hdcms与houdun人
const mainList = document.querySelector("body main")
const reg = /(<a.*href=['"])(http?)(:\/\/)(www\.)?(hdcms|houdunren)/gi
mainList.innerHTML = mainList.innerHTML.replace(reg, (p1, ...p2) => {
p2[1] += 's'; // 可以判断是否有s
p2[3] = p2[3] || "www."
return p2.splice(0, 5).join('')
})
</script>
37. Alias de grupos atómicos
?<con>
Toma un alias
<script>
let hd = `
<h1>houdunren</h1>
<span>测试</span>
<h2>hdcms</h2>
`;
// 1. 取别名的方式拿取值
// 2. ?<con>取别名
const reg = /<(h[1-6])>(?<con>.*)<\/\1>/gi
console.log(hd.replace(reg, `<h4>$<con></h4>`));
</script>
Utilice alias de grupos atómicos para optimizar expresiones regulares
<main>
<a id="hd" href="https://www.houdunren.com">后盾人</a>
<a href="https://www.hdcms.com">hdcms</a>
<a href="https://www.sina.com.cn">新浪</a>
</main>
<!-- 说明: 把连接提取成link:连接 , title:内容 -->
<script>
const main = document.querySelector('body main')
const reg = /<a.*?href=(['"])(?<link>.*?)\1>(?<title>.*?)<\/a>/gi
console.log(main.innerHTML.match(reg)); // "<a id=\"hd\" href=\"https://www.houdunren.com\">后盾人</a>""\"""https://www.houdunren.com""后盾人"
// groups:{ link: 'https://www.houdunren.com', title: '后盾人' }
const Lists = []
for (const iterator of main.innerHTML.matchAll(reg)) {
Lists.push(iterator["groups"]);
}
console.log(Lists);
</script>
38. Métodos regulares y de cadena.
- Métodos de cadena
match
matchAll
search
replace
- método regular
test
conexec
<input type="text" name="email" />
<script>
const mail = document.querySelector(`[name="email"]`);
mail.addEventListener("keyup", e => {
let value = e.target.value;
let flag = /^[\w-]+@(\w+\.)+(com|org|cn)$/i.test(value);
console.log(flag);
});
</script>
const datalist ="前端开发1不断分享视频教程,前端开1发网址是 houdunren.com前端开发1前端开发1"
//exec match
let reg = /前端开发1/g;
let count = 0;
while ((res = reg.exec(datalist))) {
count++;
}
console.log(reg.lastIndex);
console.log(reg.exec(datalist)); //
console.log(reg.lastIndex);
console.log(reg.lastIndex);
console.log(count+1);
39. ?=
Afirmar coincidencia
?=
Declaraciones condicionales
公司
Agregue un hipervínculo a las dos palabras seguidas de Baidu.
<main>在公司从事前端开发已经三年了,现在的公司是百度</main>
<script>
const mian=document.querySelector('main')
let reg=/公司(?=是百度)/g // 后面是谁的
mian.innerHTML=mian.innerHTML.replace(reg, `<a href="">$&</a>`)
</script>
Utilice afirmaciones para estandarizar precios
- Es necesario sumar .00 al número delante del yuan.
let lessons = `
js,200元,300次
php,300.00元,100次
node.js,180元,260次
`;
const reg = /(\d+)(.00)?(?=元)/gi
lessons=lessons.replace(reg, (p1, ...arg) => {
arg[1] = arg[1] || '.00'
return arg.splice(0,2).join('')
})
console.log(lessons);
40. ?<=
Afirmar coincidencia
?<=
Declaración condicional (que indica tomar la afirmación anterior)
- Reemplace todos los enlaces con https://baidu.com
<main>
<a href="https://baidu.com">百度</a>
<a href="https://yahoo.com">雅虎</a>
</main>
<script>
// 1. ?<= 条件语句 (表示取前面的断言)
let hd = 'www.baidu.com'
const reg = /(?<=www.)\w+/gi
console.log(hd.match(reg)); // ['baidu']
// 2. . 点字符表示除了换行符的任意字符
const mian=document.querySelector('main')
const regs=/(?<=href=(["'])).+(?=\1)/gi
mian.innerHTML=mian.innerHTML.replace(regs,`https:baidu.com`)
</script>
Ofuscar números de teléfono mediante afirmaciones
let users = `
向军电话: 12345678901
后盾人电话: 98745675603
`;
let reg = /(?<=\d{7})\d+/gi
users = users.replace(reg, v => {
return "*".repeat(4)
})
console.log(users);
41. ?!
Afirmar coincidencia
?!
La declaración condicional indica que lo siguiente no pertenece a nadie.
- Une palabras en inglés que no van seguidas de números
const name='abcd123abcdefgh'
const reg=/[a-zA-Z](?!\d+)/gi //后面不是数字
console.log(name.match(reg)); // ['a', 'b', 'c', 'a','b', 'c', 'd', 'e','f', 'g', 'h']
42. Restringir nombres de usuario
<body>
<input type="text" name="username">
<script>
// 1. 限制用户名不能为张三
const username=document.querySelector(`[name="username"]`)
username.addEventListener('keyup',function(){
const reg=/^(?!.*张三.*)[a-z]{1,5}$/gi
console.log(this.value.match(reg));
})
</script>
</body>
43. ?<!
Afirmar coincidencia
const name = 'abcd123abcdefgh'
const reg = /[a-zA-Z]+(?<!\d+)/gi //前面不是数字
console.log(name.match(reg)); //
let hd = "hdcms99houdunren";
let regs = /(?<!\d+)[a-z]+/gi;
console.log(hd.match(regs));
44. Utilice la eliminación de aserciones para unificar datos.
- Reemplazar no
oss
todos conoss
<main>
<a href="https://www.houdunren.com/1.jpg">1.jpg</a>
<a href="https://oss.houdunren.com/2.jpg">2.jpg</a>
<a href="https://cdn.houdunren.com/3.jpg">3.jpg</a>
<a href="https://houdunren.com/4.jpg">后盾人</a>
</main>
<script>
const main=document.querySelector("main")
const reg=/https?:\/\/([a-z]+)?(?<!=oss)\..+?(?=\/)/gi
main.innerHTML=main.innerHTML.replace(reg,v=>{
return "https://oss.houdunren.com";
})
</script>
Resume () [] {}
los diferentes significados de 1.0
- () es extraer la cadena coincidente. Hay tantas cadenas coincidentes correspondientes como () en la expresión.
- (\s*) representa una cadena de espacios consecutivos.
- [] es el rango de caracteres que define la coincidencia. Por ejemplo, [a-zA-Z0-9] significa que los caracteres en las posiciones correspondientes deben coincidir con los caracteres y números en inglés. [\s*] representa un espacio o signo *.
- {} se usa generalmente para indicar la duración de la coincidencia, por ejemplo, \s{3} indica que coinciden tres espacios y \s{1,3} indica que coinciden de uno a tres espacios.
- (0-9) coincide con el propio '0-9'. [0-9]* coincide con números (tenga en cuenta que hay un * después, puede estar vacío) [0-9]+ coincide con números (tenga en cuenta que hay
+ después, no puede estar vacío) {1-9} es escrito incorrectamente. - [0-9]{0,9} representa una cadena numérica con una longitud de 0 a 9.
Los paréntesis () son grupos, que se utilizan principalmente para limitar el rango de estructuras de selección múltiple/agrupación/captura de texto/mirar alrededor/
ejemplos de procesamiento de modo especial:
- (abc|bcd|cde) significa que este párrafo puede ser cualquiera de abc, bcd y cde, y el orden debe ser coherente.
- (abc)?, significa que este grupo aparece junto o no aparece, si aparece, aparecerá en el orden dentro de este grupo.
- (?: Abc) significa que se encuentra un grupo como abc, pero no se registra ni se guarda en una variable; de lo contrario, se puede pasar a través de la variable; de lo contrario, se puede pasarvariable; de lo contrario, puede usar $3 obtiene el contenido que coincide con (ccc), mientras que $4 obtiene el contenido que coincide con (eee), porque el primer par de corchetes no guarda la variable.
- a(?=bbb) Una mirada secuencial significa que a debe ir seguida de 3 b consecutivas
- (?i:xxxx) No distingue entre mayúsculas y minúsculas (?s:.*) Coincidencia entre líneas. Puede coincidir con caracteres de retorno de carro
Los corchetes son un
ejemplo de coincidencia única, juego de caracteres/juego de caracteres excluidos/juego de caracteres con nombre:
- [0-3] significa que los caracteres encontrados en esta posición solo pueden ser cuatro números del 0 al 3. Es similar a (abc|bcd|cde), pero los paréntesis pueden coincidir con varios caracteres consecutivos y un par de corchetes sólo puede coincidir con un solo carácter
- [^0-3] significa que los caracteres encontrados en esta posición solo pueden ser todos los caracteres excepto del 0 al 3.
- [:dígito:] 0-9 [:alnum:] A-Za-z0-9
Hay una diferencia esencial entre () y []
- El contenido dentro de () representa una subexpresión. () en sí no coincide con nada, ni está restringido a coincidir con nada. Simplemente trata el contenido entre paréntesis como la misma expresión, como (ab){1,3 }, lo que significa ese ab aparece juntos al menos una vez y como máximo 3 veces. Si no hay corchetes, ab{1,3} significa a, seguido de b que aparece al menos una vez y como máximo 3 veces. Además, los paréntesis son importantes para hacer coincidir patrones.
- [] significa que los caracteres coincidentes están en [] y solo pueden aparecer una vez, y los caracteres especiales escritos en [] coincidirán como caracteres normales. Por ejemplo, [(a)] coincidirá con los tres caracteres (, a,).