在JavaScript中是否有一种方法可以在字符串中插入空格字符或软连字符,以确保没有不可破坏的子字符串长于指定的最大长度?我在一些HTML表中没有正确包装的长字符串有问题,并且想要一个函数,它将字符串和最大字符数以及要插入的中断字符作为输入。除非必要,否则该函数不应插入破坏字符。
(我知道你可以使用CSS强制包装,但这并不总是有效,所以需要这个作为备份。)
输入字符串不一定只由数字和拉丁字符组成,可以是西里尔字母,中文,阿拉伯语......这甚至可能吗?
我假设您可以使用正则表达式查看是否有超过n个字符串的字符串不以空格或连字符结尾...
类似的东西:
myBreakFunc(s, maxChars, insertBreakChar) {...}
例如:
myBreakFunc("Onetwothreefour", 3, '­') = "One-two-thr-eef-our"
myBreakFunc("One two three four", 3, ' ') = "One two thr ee fou r"
mybreakFunc("The quick brown fox", 5, ' ') = "The quick brown fox" // nothing to do as there are no strings longer than 5 chars without a space or hyphen
myBreakFunc("The quick-brownfox", 5, ' ') = "The quick-brown fox"
答案 0 :(得分:0)
简单,您可以将其恢复为:
x
成为 breakChar
字符。[^x]
非 breakChar
字符。n
成为 maxChars
号码。查找长度为 [^x]
的 n
子序列em> [^x]
,然后在其后插入 x
。
以下是替换方法中的通用正则表达式:
str = str.replace(/[^x]{n}(?=[^x])/g, '$&x');
您可以使用RegExp
构造函数轻松编写函数,为自定义 x
和 {生成上述模式{1}} 强> 的
以下是一个例子:
n

答案 1 :(得分:0)
这是我的javascript函数:
function forceBreaks(s, ch, maxLen) {
var ret = "";
var index = 0;
var shyChar = String.fromCharCode(0xAD);
while (index < s.length) {
// get the first substring of size maxLen+1
s1 = s.substr(index,maxLen+1);
// if there are no breaking characters insert ch character (eg a soft-hyphen) at the end of the string
var i1 = s1.indexOf(' ');
var i2 = s1.indexOf('-');
var i3 = s1.indexOf(shyChar);
if (i1 == -1 && i2 == -1 && i3 == -1) {
s1 = s.substr(index, maxLen);
ret += s1 + ch;
index += maxLen;
}
else {
var lastBreakCharIndex = Math.max(i1, i2, i3);
ret += s1.substr(0,lastBreakCharIndex+1);
index += lastBreakCharIndex+1;
}
}
// remove the trailing ch character if we added one to the end
if (ret.charAt( ret.length-1 ) == ch) {
ret = ret.slice(0, -1)
}
return ret;
};
它可以解决问题,但我确信有更优雅的方式。