美文网首页前端笔记
用正则判断回文字符串

用正则判断回文字符串

作者: 周骅 | 来源:发表于2017-06-23 15:46 被阅读0次

    写于2015年3月26日,最新修订于2017年5月29日,可能已过时,请谨慎参考。

    判断一个字符串是否是回文字符串,也算是比较常见的面试题。对于“训练有素”的前端从业者,很轻松就能写出:

    function test(str) {
        return str.split('').reverse().join('') === str;
    }
    

    足够简单,虽然没啥技术含量,性能也一般。即使是老老实实地用循环写,也不是一件复杂的事情:

    function test(str) {
        const length = str.length;
        for (let i = 0; i <= length / 2; i++) {
            if (str[i] !== str[length - i - 1]) {
                return false;
            }
        }
        return true;
    }
    

    不过这样也就没有意思了。还是来挖掘一点更有趣的玩法吧。怎么玩?用正则试试。

    通常,正则无非就是抽象出字符串中的通用模式。回文字符串显然是有规律的,那么就是有希望用正则来处理:

    function test(str) {
        const arr = Array.from({ length: Math.floor(str.length / 2)});
        const regExpStr = arr.fill('(.)')
            .concat(str.length % 2 ? ['.'] : [])
            .concat(arr.map((_, index) => `\\${arr.length - index}`))
            .join('');
        return new RegExp(`^${regExpStr}$`).test(str);
    }
    

    只要字符串长度确定,正则表达式内容是确定的,因此构造正则表达式的过程可以缓存。至于性能和可读性,那就呵呵了,你要在业务逻辑里面写这种代码,还是赶快准备简历吧。

    相关文章

      网友评论

        本文标题:用正则判断回文字符串

        本文链接:https://www.haomeiwen.com/subject/vipccxtx.html