确保字符串每n个字符都有一个破坏字符

时间:2017-08-28 14:23:03

标签: javascript regex

在JavaScript中是否有一种方法可以在字符串中插入空格字符或软连字符,以确保没有不可破坏的子字符串长于指定的最大长度?我在一些HTML表中没有正确包装的长字符串有问题,并且想要一个函数,它将字符串和最大字符数以及要插入的中断字符作为输入。除非必要,否则该函数不应插入破坏字符。

(我知道你可以使用CSS强制包装,但这并不总是有效,所以需要这个作为备份。)

输入字符串不一定只由数字和拉丁字符组成,可以是西里尔字母,中文,阿拉伯语......这甚至可能吗?

我假设您可以使用正则表达式查看是否有超过n个字符串的字符串不以空格或连字符结尾...

类似的东西:

myBreakFunc(s, maxChars, insertBreakChar) {...}

例如:

myBreakFunc("Onetwothreefour", 3, '&shy') = "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"

2 个答案:

答案 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;
};

它可以解决问题,但我确信有更优雅的方式。