Open wingmeng opened 5 years ago
没有什么字符串处理是用一个正则表达式解决不了的,如果有,那就用两个,事实上我用了四个。
DEMO 更精彩 (已封装,并提供测试用例)
这是送分题吗?
content.length > 140;
使用正则将所有连续空格、换行替换为1个
content.trim() // 移除两端空格 .replace(/[\r\n]+/g, '\n') // 连续换行合并为 1 个 .replace(/[ ]+/g, ' ') // 内容中的连续空格合并成 1 个 > 140;
原理:将内容按 2 个 ASCⅡ 字符作为切割点划分数组,累加统计数组项里面的字符数,再加上数组长度 - 1 的值,得到最终字数
var arr = content.trim() .replace(/[\r\n]+/g, '\n') .replace(/[ ]+/g, ' ') .split(/[\x00-\xff]{2}?/g); // ASCⅡ 码范围(惰性匹配) var len = arr.length - 1 + arr.reduce(function(total, cur) { return total += cur.length }, 0); len > 140;
先按题 2 处理,然后使用正则匹配网址并替换为 10 个占位字符,最后按题 3 处理,统计最后字数
function fixASC2CharsNum(str) { var arr = str.split(/[\x00-\xff]{2}?/g); return arr.length - 1 + arr.reduce(function(total, cur) { return total += cur.length; }, 0); } content = content.trim() .replace(/[\r\n]+/g, '\n') .replace(/[ ]+/g, ' '); var regex_url = /https?:\/\/(:?[\w-]+\.)+[\w-]+\S+\b/g; // 网址(宽松判断) var shortUrlCharsNum = 10; var placeholder = Array(shortUrlCharsNum).fill('囧'); content = content.replace(regex_url, function(matched) { // 小于 10 个字符的不使用短网址 if (fixASC2CharsNum(matched) < shortUrlCharsNum) { return matched; } return placeholder; }); fixASC2CharsNum(content) > 140;
优秀
优秀、良好、一般、差劲
repeat
/[ ]+/g
需注意多字节汉字的情况
https://blog.csdn.net/weixin_34344403/article/details/90973551
题目:
我的答案:
没有什么字符串处理是用一个正则表达式解决不了的,如果有,那就用两个,事实上我用了四个。
DEMO 更精彩 (已封装,并提供测试用例)
第 1 题
第 2 题
第 3 题
第 4 题