【问题标题】:Regular Expressions to insert "\r" every n characters in a line and before a complete word (basically a wordwrap feature)正则表达式在一行中的每 n 个字符和一个完整的单词之前插入“\r”(基本上是一个自动换行功能)
【发布时间】:2010-02-09 21:17:27
【问题描述】:

我是 JavaScript 和正则表达式的新手。我正在尝试自动将文本文档格式化为每行特定数量的字符,或者在单词前添加“\r”。

这在功能上类似于许多文本编辑器中的 Wordwrap。

例如。我想要每行 10 个字符

原文:我叫戴维·布鲁。

修改:我的名字\ris Davey \rBlue。

看,如果第 10 个字符是一个单词,它会将整个单词放到一个新行中。

我认为以下内容在某种程度上应该可以工作 /.{1,10}/(这应该可以找到任意 10 个字符吗?)

不知道其余的怎么做。

请帮忙。

【问题讨论】:

  • 有什么特别的原因你不只是使用浏览器的内置自动换行吗?

标签: javascript regex data-processing


【解决方案1】:

基本上

 text = text.replace(/.{1,10} /g, "$&\n")

我确定您的意思是“\n”而不是“\r”

【讨论】:

    【解决方案2】:

    需要是正则表达式吗?我会这样做:

    var str = "My name is Davey Blue.",
        words = str.split(/(\s+)/);
    for (var i=0,n=0; i<words.length; ++i) {
        n += words[i].length;
        if (n >= 10) {
            words[i] = "\n" + words[i];
            n = 0;
        }
    }
    str = words.join("");
    

    【讨论】:

      【解决方案3】:

      这将使用正则表达式来解决问题。

      myString.replace(/((\w|\s){0,9}\s|\w+\s|$)/g, "$1\r")
      

      (如果 N 是所需的行长,则将“9”替换为 N-1)

      在字符串中的每个位置,它尝试按以下顺序执行以下操作:
      1.尝试贪婪地匹配最多9个字符(=尽可能多)后跟一个空格(因此总共最多10个以空格结尾的字符),然后在其后插入\ r(通过字符串替换) 2.如果失败(因为找不到少于10个字符的单词),它匹配一个单词(不管它有多长)加一个空格,然后在这个之后插入\r
      3.它匹配字符串的结尾并插入\r

      【讨论】:

        【解决方案4】:

        我认为正则表达式不会为您做到这一点。我会在谷歌上搜索 javascript wordwrap,我相信有人已经为你编写了一个库来为你做这件事

        【讨论】:

        • 不是正则匹配,而是用正则替换部分字符串
        猜你喜欢
        • 2017-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-01
        • 1970-01-01
        • 2015-11-09
        • 2016-01-25
        相关资源
        最近更新 更多