js正则 变量中括号

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js正则 变量中括号相关的知识,希望对你有一定的参考价值。

function replaceAll(s1, s2)

return this.replace(new RegExp(s1,"gm"),s2);

上面的方法,是正则替换
可是s1或s2中有中括号该怎么办,像 ‘aaa[b]cc[b]c’,要转换成'aaa(b)cc(b)c' ,该怎么写呢,这里转义要怎么处理。谢谢!
我知道转义加斜杠,我的问题是,字符串s1就是 ‘aaa[b]cc[b]c’ 这样子的,没有斜杠,那么正则处理的时候要怎么办?谢谢!
String.prototype.replaceAll = function(s1,s2)
return this.replace(new RegExp(s1,"gm"),s2);

抱歉,是我问错了,是这样的
var str = 'aaa[b]cc[b]c';
var from = '[';
var to = '(';

我想newStr = str.replaceAll(from, to); //最后值为'aaa(b]cc(b]c'

直接距离,方便看懂,中括号:[]
1. /[abcd]/ 任意一个 /a|b|c|d/
/[a,b,c,d]/ a或者b或者c或者d或者逗号
/[a|b|c]/
2. /[a-z]/ 区间
/[a-c]/
/[0-9]/ \\d
/[1-7]/
/[1-38]/ 1-3或者8
/a-z/
/[A-Z]/
3. /[^abc]/ 排除
/[^0-9]/
/[^a-z]/
/^[a-z]/ 必须以字母打开头东西
/^[^a]/
参考技术A function replaceAll(str,s1,s2)

return str.replace(new RegExp(s1,"gm"),s2);

var str = 'aaa[b]cc[b]c';
alert(replaceAll(str,"\\[(.*?)\\]","($1)"));追问

String.prototype.replaceAll = function(s1,s2)
return this.replace(new RegExp(s1,"gm"),s2);

抱歉,是我问错了,是这样的
var str = 'aaa[b]cc[b]c';
var from = '[';
var to = '(';

我想newStr = str.replaceAll(from, to); //最后值为'aaa(b]cc(b]c'

追答

替换两个都行了替换一个怎么就不会变通呢?var from = '\\[';即可

追问

汗,说了不是转义的问题。
我是说,from和to是函数的两个参数,作为调用的接口,使用上来讲,不要转义,我要的效果是,
var from = ']'; //不要转义,']'就表示一个字符,能直接作为replaceAll的参数,那多好。

var to = '('; //不要转义

replaceAll(from, to); //完成你完成的内容,你体会一下跟你之间的区别吧。

我自己完成了,不过还是非常感谢你。

追答

是你不会举一反三~~
自己对比一下这两个的区别吧。

function replaceAll(str,s1,s2)

return str.replace(new RegExp('\\'+s1+"(.*?)","gm"),s2+"$1");

var str = 'aaa[b]cc[b]c';
var from = '[';
var to = '(';
alert(replaceAll(str,from,to));

本回答被提问者采纳

js正则表达式系统讲解(全面的总结)

js正则表达式系统讲解

1.声明与使用

  • 通过构造函数定义(一般不这么干)
let 变量名= new RegExp(/表达式/);
  • 字面量直接定义(一般这么干)
let 变量名= /表达式/;
  • 常用方法(一般用于检测传入的字符串是否符合该规则并返回布尔值)
exp.test("要检测的字符串")

2.预定义类与转义符

  • . [^\\n\\r] 除了换行和回车之外的任意字符
  • \\d [0-9] 数字字符digit
  • \\D [^0-9] 非数字字符
  • \\w [a-zA-Z0-9_] 单词字符(所有的英文字母数字和_) word
  • \\W [^a-zA-Z0-9_] 非单词字符
  • \\s [\\f\\r\\n\\t\\v] 不可见字符 space
  • \\S [^\\f\\r\\n\\t\\v] 可见字符
  • \\f 表示换页 form feed
  • \\t 表示水平制表符 table
  • \\v 表示垂直制表符 vertical table
  • \\r,\\n,\\r\\n的区别(顺便科普一下)
    在万恶的旧社会,打字机换行(\\n newline)之后只会下移一行,需要回到一行的开头(\\r return)才能继续打字
    老式的操作系统也继承了打字机的这一特性,但用户换行之后一般都是要回到开头的,因此新式的操作系统为了方便将键盘上的Enter键的含义修改为\\r\\n或者直接将\\n的含义改为“移动到下一行的开头”。
  • | 表示或 或的优先级最低 可以通过()提升优先级

3. 字符类

  • 简单类[abc] 表示该位置可以出现的字符
  • 负向类[^abc] 表示该位置不可以出现的字符
  • 范围类[a-e] 表示该位置可以出现的字符的范围
  • 组合类[a-xA-E0-9] 范围类的组合

4. 边界,量词,括号

  • ^ 会匹配行或者字符串的起始位置
  • ^只有在[]内才表示非 在外边表示开始
  • $ 会匹配行或字符串的结尾位置
  • ^$在一起 表示必须是这个(精确匹配)
  • “*” 重复零次或更多 x>=0
  • “+” 重复一次或更多次 x>=1
  • “?” 重复零次或一次 x=(0||1)
  • n n次 x=n
  • n, 重复n次或更多 x>=n
  • n,m 重复出现的次数比n多但比m少 n<=x<=m
  • ()表示一组
  • []表示一个字符的位置
  • 表示次数

5. 项目中常用到的匹配(CV工程师必备)

// 1. 匹配国内电话号码
let tel = /^0\\d2,3-\\d7,8$/

// 2. 匹配姓名
let name = /^[\\u4e00-\\u9fa5]2,$/

// 3.匹配腾讯QQ号
let qq = /^[1-9]\\d4,10$/

// 4. 匹配手机号
let phone = /^(13[0-9]|14[57]|15[0-9]|18[0-9])\\d8$/

// 5.匹配邮箱
let emai = /^\\w+([+-.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$/

// 6. 验证中文
let regex = /^[\\u0391-\\uFFE5]+$/;

// 7. 验证身份证
let idCrad = /^\\d6(18|19|20)?\\d2(0[1-9]|1[12])(0[1-9]|[12]\\d|3[01])\\d3(\\d|X)$/;

// 8. 验证整数
let number = /^[-+]?\\d*$/;

// 9. 验证日期格式是否为YYYY-MM-DD hh:mm:ss格式
let date = /^(\\d1,4)(-|\\/)(\\d1,2)\\2(\\d1,2) (\\d1,2):(\\d1,2):(\\d1,2)$/;

// 10. 验证输入的字符是否是英文字母
let en = /^[a-zA-Z]+$/

// 11. 百度网盘链接匹配
// 支持两种百度分享的两种链接格式
// 格式一:链接: https://pan.baidu.com/s/15gzY8h3SEzVCfGV1xfkJ 提取码: vsuw 复制这段内容后打开百度网盘手机App,操作更方便哦
// 格式二:http://pan.baidu.com/share/link?shareid=179436&uk=32720556 提取码: vsuw 复制这段内容后打开百度网盘手机App,操作更方便哦

let reg = /([http|https]*?:\\/\\/pan\\.baidu\\.com\\/[(?:s\\/)0,1|(share)]*(?:[0-9a-zA-Z?=&])+)(?:.+:(?:\\s)*)?([a-zA-Z]4)?/;

// 12. 是否带有小数
let  objRegExp= /^\\d+\\.\\d+$/;

// 13. 校验是否全由8位数字组成
let reg = /^[0-9]8$/

1. 希望本文能对大家有所帮助,如有错误,敬请指出

2. 原创不易,还请各位客官动动发财的小手支持一波(关注、评论、点赞、收藏)
3. 拜谢各位!后续将继续奉献优质好文
4. 如果存在疑问,可以私信我(主页有Q)

以上是关于js正则 变量中括号的主要内容,如果未能解决你的问题,请参考以下文章

js正则表达式获取多个中括号[]中的内容

js 正则表达式获取小括号内的内容,不含括号

JS正则表达式 替换括号,尖括号等

JS正则替换掉小括号及内容

js正则表达式

正则表达式 获取括号内的内容