Javascript输出反斜杠 js正则表达式反斜杠_Javascript输出反斜杠

实例

就是如果正则中出现了反斜杠 “\” ,在用构造函数时创建正则对象时,要转义,比如: re = new RegExp(“\w+”) // 这里的 \ 要转义,re = /\w+/ // 这样就不需要转义;

参考下面实例是等效的

html={tab.content.replace(new RegExp('href="//', "g"), 'href="http://').replace(new RegExp('src="//', "g"), 'src=" http://')}
html={tab.content.replace(/href=\"\/\//g, 'href="http://').replace(/src=\"\/\//g, 'src=" http://')}
1、替换url中字符参数拼接
let url = "http://demo.bitech.cn/zjdcommunityoa.dingtalk/#/info?param=:approval/details?ProjectID=1876125382869043&IsEdit=1";
let reg = new RegExp("(^.+/#/)info\\?param=:approval/details\\?ProjectID=(.*)\&.+=(.*)");
if (reg.test(url)) {
    let replaceurl = url.replace(reg, `$1info/approval/detail/$2/$3`);
    console.log("replaceurl", replaceurl); 
    // http://demo.bitech.cn/zjdcommunityoa.dingtalk/#/info/approval/detail/1876125382869043/1
}
2、手机号判断
const CELLPHONE_REGEXP = /^1[3|4|5|6|7|8|9][0-9]{9}$/;

固定电话

export const TEL_REGEXP = /^((0\d{2,3})-)(\d{7,8})(-(\d{3,}))?$/; // 固定电话
3、邮箱判断
/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/
4、千位分隔
let reg = new RegExp("\\d{1,3}(?=(\\d{3})+$)", "g");
console.log("result", "999889663215".replace(reg, "$&,"));
5、手机号敏感处理
"13262786327".replace(/(\d{3})\d{4}(\d{4})/, '$1****$2'
6、敏感词替换
"草,今天真是见了鬼了".replace(/cao|草|他妈的/g, (str) => {
                let result = "";
                for (let i = 0; i < str.length; i++) {
                    result += "*";
                }
                return result;
            })
7、密码校验

(1)

let pwdRegex=/^(?![0-9]+$)(?![a-z]+$)(?![A-Z]+$)(?!([^(0-9a-zA-Z)])+$).{6,}$/;
let pwdRegex = new RegExp('^(?![0-9]+$)(?![a-z]+$)(?![A-Z]+$)(?!([^(0-9a-zA-Z)])+$).{6,}$');

正则表达式意思为
不能为纯数字,不能为纯小写字母,不能为纯大写字母,不能为纯特殊符号,至少8-16位。
细拆分为
(?![0-9]+$) 表示后面不能为纯数字

(?![a-z]+$) 表示后面不能为纯小写字母

(?![A-Z]+)表示后面不能为纯大写字母(?!([(0−9a−zA−Z)])+$)表示后面不能为纯大写字母

(?!([(0−9a−zA−Z)])+) 表示后面不能为除数字和字母外的纯特殊符号

^ 这个符号单独用表示“开头”,用在中括号的开头,表示“非”;

.{6,} 表示至少6位的任意字符

$ 表示“结尾”

(2)

let pwdRegex = new RegExp('(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).{6,10}')
pwdRegex.test(data.password) // true符合校验规则 false不符合校验规则

密码中必须包含大小写 字母、数字、特称字符,至少6个字符,最多10个字符;

(3)

let reg = new RegExp(/^(?![^a-zA-Z]+$)(?!\D+$)/);

(?![^a-zA-Z]+KaTeX parse error: Undefined control sequence: \D at position 42: …能为纯数字或者特殊符号 (?!\̲D̲+)也不能是纯非数字符号,大致可以理解为要有数字

8、替换url里{{}}中特殊字符
let templates = {
            qzone: 'http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url={{URL}}&title={{TITLE}}&desc={{DESCRIPTION}}&summary={{SUMMARY}}&site={{SOURCE}}&pics={{IMAGE}}',
            qq: 'http://connect.qq.com/widget/shareqq/index.html?url={{URL}}&title={{TITLE}}&source={{SOURCE}}&desc={{DESCRIPTION}}&pics={{IMAGE}}&summary="{{SUMMARY}}"',
            weibo: 'https://service.weibo.com/share/share.php?url={{URL}}&title={{TITLE}}&pic={{IMAGE}}&appkey={{WEIBOKEY}}',
            wechat: 'javascript:',
            douban: 'http://shuo.douban.com/!service/share?href={{URL}}&name={{TITLE}}&text={{DESCRIPTION}}&image={{IMAGE}}&starid=0&aid=0&style=11',
            linkedin: 'http://www.linkedin.com/shareArticle?mini=true&ro=true&title={{TITLE}}&url={{URL}}&summary={{SUMMARY}}&source={{SOURCE}}&armin=armin',
            facebook: 'https://www.facebook.com/sharer/sharer.php?u={{URL}}',
            twitter: 'https://twitter.com/intent/tweet?text={{TITLE}}&url={{URL}}&via={{ORIGIN}}',
            google: 'https://plus.google.com/share?url={{URL}}'
        };
// 查询{{}}重的字符,回调函数中返回的是当前匹配字符替换后的字符串,(\w)意思是匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9_]”
this.templates[name].replace(/\{\{(\w)(\w*)\}\}/g, function (_m, fix, key) {
                let nameKey = name + fix + key.toLowerCase(); // qqUrl
                key = (fix + key).toLowerCase(); // url
                // data中是传过来的url或者title等值的对象, 优先取值qqUrl或url
                return encodeURIComponent((data[nameKey] === undefined ? data[key] : data[nameKey]) || '');
            })

str.replace(ext,function(str1,function(a,b,c,d).
replace第二个参数可以是个回调函数,这个函数的第一个参数是匹配到的字符串,如果有分组,接下来的参数就是匹配到的分组。然后是匹配到的字符串的位置,最后是被匹配的字符串。

9、匹配字符串中所有img标签并修改标签src属性值
var imgReg = /<img.*?(?:>|\/>)/gi;
 //匹配src属性
var srcReg = /src=[\'\"]?\.([^\'\"]*)[\'\"]?/i;
var arr = html.match(imgReg);
    if (arr && arr.length) {
      for (var i = 0; i < arr.length; i++) {
        var src = arr[i].match(srcReg);
        //获取图片地址
        if (src[1] && !src[1].startsWith('http')) {
          html = html.replace(src[1], server.url + src[1])
        }

      }
    }

什么时候”^”是否定字符,什么时候是匹配开始行
经过对比,只要是”^”这个字符是在中括号”[]”中被使用的话就是表示字符类的否定,如果不是的话就是表示限定开头。我这里说的是直接在”[]”中使用,不包括嵌套使用。

?:”非获取匹配bai,匹配冒du号后的内容但不获取匹配结果,不进行存储供zhi以后使用。
仿照写了个替换所有div里面style里所有内容:

var divReg = /<div.*?(?:>|\/>)/gi;
//匹配style属性
var styleReg = /style=[\'\"]?([^\'\"]*)[\'\"]?/i;
var arr = html.match(divReg);
if (arr && arr.length) {
  for (var i = 0; i < arr.length; i++) {
    var style = arr[i].match(styleReg);
    //获取style
    if (style[1] && !style[1].startsWith('http')) {
      html = html.replace(src[1], 'style="width:100%;height:auto"')
    }

  }
}
10、替换字符串中间为*
comment.inputer.replace(/(.{1}).*(.{1})/, '$1***$2')
11、提取()中间的内容
let reg = /.*[(](.*)[)]$/g;
skuName.replace(reg, "$1")
12、替换html字符串中的视频标签
resolveMedia(value: string) {
    const baseUrl = getAssetsUrl();
    return value
        ? value.replace(/\<oembed\b\s+\burl\b="([^\>]+)"\s?\>\<\/oembed\>/gi, (_, url: string) => {
              const { searchParams } = new URL(url.replace(/&/gi, "&"), baseUrl || location.href),
                  [width, height] = [searchParams.get("width") ?? searchParams.get("w"), searchParams.get("height") ?? searchParams.get("h")];

              return `<div class="ck-media__wrapper"> <video ${width ? `width=${width}` : ""} ${
                  height ? `width=${height}` : ""
              } controls autoplay loop><source src="${url}" type="video/mp4"></video></div>`;
          })
        : value;
}

正则表达式手册