第一种正则
var str = 'ds第三方第三方a的f梵蒂冈a个ds'
str.replace(/[^\x00-\xff]/g,"$&\x01").replace(/.{9}\x01?/g,"$&\n").replace(/\x01/g,"")
打印结果:'ds第三方第\n三方a的f梵\n蒂冈a个ds\n'
注释:
将每个中文字符变为两个字符,比如“中文”替换成“中文”
匹配任意每9个字符或9个字符加,在匹配的字符串后加一个换行符
将所有的去除
\xnn 匹配ASCII代码中十六进制代码为nn的字符
[^\x00-\xff]
表示匹配非单字节的字符,例如汉字,汉字符号……
单字节字符包括英文字母,数字,英文符号……排除这些剩下的也就是汉字和其他文字了
$& 与 regexp 所有相匹配的子串
\x01 控制字符,soh,表示标题开始
. 除换行符 \n 之外的任何单字符
?零次或一次
第二种
function getNewline(val) {
let str = new String(val);
let bytesCount = 0;
let s = "";
for (let i = 0, n = str.length; i < n; i++) {
let c = str.charCodeAt(i);
// 统计字符串的字符长度
if ((c >= 0x0001 && c <= 0x007e) || (0xff60 <= c && c <= 0xff9f)) {
bytesCount += 1;
} else {
bytesCount += 2;
}
// 换行
s += str.charAt(i);
if (bytesCount >= 10) {
s = s + '\n';
// 重置
bytesCount = 0;
}
}
return s;
}
getNewline('ds第三方第三方a的f梵蒂冈a个ds')
打印结果:'ds第三方第\n三方a的f梵\n蒂冈a个ds'