JavaScript正则表达式-常见面试题总结

问题一

JavaScript 写一个字符串转成驼峰的方法,o_div_style_position转成oDivStylePosotion。

var str = 'border-bottom-color';
var strRg = str.replace(/\-[a-z]/g, function (params) {
  return params.charAt(1).toUpperCase();
})
console.log(strRg);
  1. charAt(1)也可以用substr(1)、substring(1)来替代。
  2. toUpperCase()转换成大写字母。
  3. /-[a-z]/g中g表示全文检索,part表示匹配到的字符
  4. replace是字符串的方法,返回经过修改的新字符串。

问题二

JavaScript 查找字符串中出现最多字符的个数
例如:sdjksfssscfssdd ->字符最多的是s,出现了7次

var str = 'sdjksfssscfssdd';
var maxObj = {
    key: null,
    count: null
};
var maxCou = 0;
while (str) {
  var i = 0;
  var reg = new RegExp(str[0], 'g');
  var currStr = str[0];
  str = str.replace(reg, function (part) {
    i++;
    return '';
  })
  if (i > maxCou) {
    maxObj.key = currStr;
    maxCou = maxObj.count = i;
  }
}
console.log(maxObj.key + ':' + maxObj.count)

问题三

JavaScript 把12233435566690中连续重复的数字去掉

判断是否为空字符串,是就直接返回;

不是的话

初始字符串为str第一个,从第二个开始,如果不等于他们前一个的字符,代表不重复,加入初始字符,迭代进行,直到最后一个,返回

function removeRepetition (str) {
  if (str != '') {
    var result = str[0];
    for (var i = 1; i < str.length; i++) {
      if (str[i] != str[i - 1]) {
        result += str[i];
      }
    }
  }
  else result = '';
  return result;
}
console.log(removeRepetition("sssssssssaaaaaaaaasasas")); //sasasas

问题四

JavaScript 用js实现千位分隔符?

例如123456789–>123,456,789

var str = '123456789';
var reg = /^([1-9]\d{0,2})((?:\d{3})+)$/;
var s = str.replace(reg, function () {
  return RegExp.$1 + ',' + RegExp.$2.match(/\d{3}/g);
})
console.log(s);//123,456,789

知识点

  • 将第一个逗号前面的数字作为第一组,后面所有数字为第二组,第二组是由多个三位的数字组合而成的,整体需要匹配捕获,但是每个三位数不需要匹配捕获所以加?:。
  • RegExp.$1获取第一个分组,RegExp.$2获取第二个分组。
  • match返回匹配到的数据,是数组类型。

注意:IE10中直接调用分组不识别,需要在此前调用test方法:

var str = '123456789';
var reg = /^([1-9]\d{0,2})((?:\d{3})+)$/;
if (reg.test(str)) {
  var s = str.replace(reg, function () {
    return RegExp.$1 + ',' + RegExp.$2.match(/\d{3}/g);
  })
}
console.log(s);//123,456,789

问题五

JavaScript 写一个正则表达式判断字符串是否是对称数

var str = 'Woow';
var reg = /^([a-z])([a-z])\2\1$/i;
if (reg.test(str)) {
  console.log('ok')
}

问题六

JavaScript 写出一个正则表达式用于匹配由数字和字母组成的字符串

function checkPassWord (nubmer) {
  var re = /^[0-9a-zA-Z]*$/;  //判断字符串是否为数字和字母组合
  if (!re.test(nubmer)) {
    return false;
  } else {
    return true;
  }
}


愿你的坚持终有收获。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值