剑指Offer JZ49 把字符串转换成整数(JavaScript:正则)

时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M 热度指数:463889
本题知识点: 字符串 数学 字符串

题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
返回值描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1
输入
“+2147483647”
返回值
2147483647

示例2
输入
“1a33”
返回值
0

思路:正则去判断字符串里的元素,若有字母,直接返回0;
然后判断符号,注意符号后必须有数字

若直接通过1将字符串转换成整数,注意-0需要特殊处理,因为-01=-0,答案要求0

function StrToInt(str) {
    
    
	// 匹配到字母就是不合规范
    if (/[A-Za-z]/g.test(str)) return 0;
    //开头可以有±符号(可选) , \d+必须有一个以上的数字
    let reg = /([+|-]?)(\d+)/;
    if (reg.test(str)) {
    
    
        if (str == '-0') return 0
        return str * 1
    }
    return 0
}

正则更高级的写法

function StrToInt(str) {
    
    
    let reg1 = /[a-zA-Z]/;
    if (reg1.test(str)) return 0;

    let reg2 = /([+|-]?)(\d+)/;
    if (reg2.test(str)) {
    
    
        str = str.replace(reg2, function($0, $1, $2) {
    
    
            // $0是RegExp对象,即str;$1是第一个原子组(括号)匹配到的,$2同理$1
            if ($2 == 0) return $2; //处理±0
            else if ($1 === "-") return $1 + $2; //处理负数
            else return $2;
        });
        return str;
    }
    return 0;
}

答案参考自:q6655443322

正则学习知识推荐:后盾人正则表达式文档

猜你喜欢

转载自blog.csdn.net/weixin_44523860/article/details/114672604