一、正向预查
(1)正向预查
正向预查: 匹配一个字符串,条件是这个字符串后面指定了特定的字符
var str = '1231231231',
reg = /1(?=2)/g; //或!=2
console.log(str.match(reg));// ["1", "1", "1"]
匹配1后面紧跟着2的1
二、贪婪与非贪婪模式
(1)贪婪模式
贪婪模式: 只匹配多,不匹配少
(2)改非贪婪模式
非贪婪模式: 能匹配少,就不匹配多
var str = 'abcd{
{efg}}abcd{
{zyz}}',
reg = /{
{.*}}/g;
console.log(str.match(reg));//["{
{efg}}abcd{
{zyz}}"]
var str = 'abcd{
{efg}}abcd{
{zyz}}',
reg = /{
{.*?}}/g;
console.log(str.match(reg));//["{
{efg}}", "{
{zyz}}"]
var str = 'aaaaaaa',
reg = /\w?/g;
console.log(str.match(reg));//["a", "a", "a", "a", "a", "a", "a", ""]
var str = 'aaaaaaa',
reg = /\w??/g;
console.log(str.match(reg));//["", "", "", "", "", "", "", ""]
在量词后面加问号就是改非贪婪模式
三、replace方法
(1)replace
位置
字符串上面的方法(String.prototype)
定义及用法
replace() 可以在字符串中把某些字符替换成另一些字符
stringObject.replace(正则表达式/字符串,要替换的字符)
replace内置函数
var str = 'aabbccdd',
reg = /(\w)\1(\w)\2/g;
var str1 = str.replace(reg, function ($, $1, $2) {
console.log($, $1, $2);
});
// aabb a b
// ccdd c d
第一个参数是匹配出来的字符串,第二个参数往后是子表达式
大坑
var str = 'JSplusplus';
console.log(str.replace('plus', '+'));//JS+plus
replace不具备全局匹配,所以只能匹配一个
示例1
将JSplusplus替换成js++
var str = 'JSplusplus',
reg = /plus/;
console.log(str.replace(reg, '+'));//JS+plus
var str = 'JSplusplus',
reg = /plus/g;
console.log(str.replace(reg, '+'));//JS++
示例2
将xxyy替换成yyxx
//方法一
var str = 'aabbccdd',
reg = /(\w)\1(\w)\2/g;
var str1 = str.replace(reg, '$2$2$1$1');
console.log(str1); //bbaaddcc
//方法二
var str = 'aabbccdd',
reg = /(\w)\1(\w)\2/g;
var str1 = str.replace(reg, function ($, $1, $2) {
return $2 + $2 + $1 + $1
});
console.log(str1);//bbaaddcc
$符可以选择子表达式,后面的数表示选择第几个表达式
示例3
将js-plus-plus改成JSPlusPlus
var str = 'js-plus-plus',
reg = /-(\w)/g;
var str1 = str.replace(reg, function ($, $1) {
return $1.toUpperCase();
});
console.log(str1);//jsPlusPlus
示例4
将jsPlusPlus改成js_plus_plus
var str = 'jsPlusPlus',
reg = /([A-Z])/g;
var str1 = str.replace(reg, function ($, $1) {
return '_' + $1.toLowerCase();
});
console.log(str1);//js_plus_plus
示例5
将xxyyzz改成XxYyZz
var str = 'xxyyzz',
reg = /(\w)\1(\w)\2(\w)\3/g;
var str1 = str.replace(reg, function ($, $1, $2, $3) {
return $1.toUpperCase() + $1 + $2.toUpperCase() + $2 + $3.toUpp
});
console.log(str1);//XxYyZz
示例6
将aabbcc改成a¥b¥c¥(不能使用function)
var str = 'aabbcc',
reg = /(\w)\1(\w)\2(\w)\3/g;
var str1 = str.replace(reg, '$1¥$2¥$3¥'); //a¥b¥c¥
var str1 = str.replace(reg, '$1$$$2$$$3$$'); //a$b$c$
注意:要用美元符的时候,在其后面加上$符就可以了
示例7
匹配特殊符号
var str = 'aa\\bb\\cc',
reg = /\\/g;
console.log(str.match(reg)); //["\\", "\\"]
var str = 'aa?bb+cc',
reg = /\?|\+/g;
console.log(str.match(reg)); //["?", "+"]
匹配语法里存在的符号需要转义
示例8
去重
// 剔除等个
var str = 'aabbcc',
reg = /(\w)\1/g;
console.log(str.replace(reg, '$1')); //abc
var str = 'aabbcc',
reg = /(\w)\1(\w)\2(\w)\3/g;
console.log(str.replace(reg, '$1$2$3')); //abc
// 剔除不等个
var str = 'aaaaabbbccccccccc',
reg = /(\w)\1*/g;
console.log(str.replace(reg, '$1'));//abc
var str = 'aaaaabbbccccccccc',
reg = /(\w)\1*(\w)\2*(\w)\3*/g;
console.log(str.replace(reg, '$1$2$3'));//abc
示例9
1000000000000要求每隔三位加逗号
var str = '1000000000000';
var str1 = str.replace(/(\d{3}\B)/g, '$1,')
console.log(str1); //100,000,000,000,0 方向反了, 应从后面往前匹配
var str = '1000000000000';
var reg = /(?=(\B)(\d{3})+$)/g;
var str1 = str.replace(reg, ',');
console.log(str1); //1,000,000,000,000
还是不懂请点击查看问题1
示例10
10000000.9999要求每隔三位加逗号,且小数点后面的数字保持不动
"100032320000.9992212129".replace(/(?<!\.\d*)(?=(\B\d{3})+(\.\d+|)$)/g, ",")
// "100,032,320,000.9992212129"
(2)双大括号替换值
示例1
var str = 'My name is {
{name}}. I\'m {
{age}} years old.',
reg = /{
{(.*?)}}/g;
var str1 = str.replace(reg, function (node, key) {
return {
name: 'Jone',
age: 32
}[key]
})
console.log(str1);
//My name is Jone. I'm 32 years old.
示例2
<script type="text/html" id="tpl">
<div class="wrap">
<h1>{
{
title}}</h1>
<h3>{
{
author}}</h3>
<p>{
{
content}}</p>
</div>
</script>
<script>
var tpl = document.getElementById('tpl').innerHTML;
var reg = /{
{(.*?)}}/g;
var str1 = tpl.replace(reg, function (node, key) {
return {
title: '晴天',
author: '周杰伦',
content: '故事的小黄花,从出生的那年就飘着,童年的荡秋千,随记忆一直飘到现在'
}[key]
})
console.log(str1);
// <div class="wrap">
// <h1>晴天</h1>
// <h3>周杰伦</h3>
// <p>故事的小黄花,从出生的那年就飘着,童年的荡秋千,随记忆一直飘到现在</p>
// </div>
今天的文章js正向预查_reghdfe固定效应命令「建议收藏」分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/62952.html