2016-11-29 81 views
2

我有这个工作脚本,每79个字符都有一个分隔线。我想添加一个条件,如果第79个字符是空格,它只会断行,如果不是,那么它将在下一个空格中断开。 (所以这个词不会被打破)如果不是等待空间,则分隔每个X字符

这是我目前的功能。 (我不知道如何表达添加此条件)

function myFunction() { 
    var long_string = document.getElementById('textg').innerHTML; 
    document.getElementById('textg').innerHTML = long_string.replace(/(.{79})/g, "$1<br>"); 
} 
+0

JS不能在名称中包含用'-'命名的变量。 – Justinas

+1

@Justinas:我假设第一个例子是伪代码 – Cerbrus

+0

“等一个”? – usr2564301

回答

5

这应该做的伎俩:

var str = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed aliquet feugiat enim. Nam viverra sapien quis nisi consequat, nec viverra ligula tempus. Pellentesque sed diam id velit malesuada pellentesque. Vivamus nec condimentum purus. Suspendisse purus lacus, elementum non feugiat molestie, volutpat nec nisl. Vivamus mauris eros, pulvinar eu velit vitae, hendrerit venenatis velit. In accumsan nec lacus eget aliquet. Integer ullamcorper accumsan lacinia. Sed eleifend dignissim libero. Aenean sodales imperdiet ipsum, ut vulputate ante accumsan sit amet. Nunc mollis tristique finibus. Donec pellentesque orci nec ante efficitur scelerisque. Cras ullamcorper euismod sem in pretium. Morbi felis turpis, venenatis sit amet erat mattis, consectetur commodo nisi. Aliquam varius ultrices orci eget tristique."; 
 

 
var broken = str.replace(/(.{79}[^ ]*)/g, "$1<br />"); 
 

 
document.getElementById('result').innerHTML = broken;
<pre id="result"></pre>

神奇的是在this regex

/(.{79}[^ ]*)/g

captures

  • 79个字符:.{79} +
  • 凡是跟随它不是一个空间:[^ ]* +
  • 结尾间隔

替换然后替换捕获部分与 “说” +一个换行符("$1<br />"


注意,这将导致空间的<br />之前,在字符串中:
enim. <br />Nam

如果你想摆脱这些,在正则表达式中将最后一个空间移出捕获组。然后,空间将被丢弃:

/(.{79}[^ ]*) /g

+0

这正是我正在寻找的!并感谢你的好解释!它确实有助于理解这些正则表达式。我对这些有点新。你有没有使用关于他们的法典? – Ezhno

+2

非常欢迎!这些是一些很好的网站:http://www.regular-expressions.info/和https://regex101.com/ – Cerbrus

+1

@Ezhno:我更新了答案。正则表达式中的“+”意味着如果第79个字符是一个节奏,它就不会中断。现在已经解决了。 – Cerbrus

-1

简单地检查它是否超过79个字符,而不是白色的空间,比设置的标志。

var force = false; // in global scope 

if ((longString == 79 && lastCharacter == ' ') || (lastCharacter == ' ' && force)) { 
    breakline(); 
    force = false; 
} else if (longString > 79 && lastCharacter != ' ') { 
    force = true; 
} 
+0

'breakline()'?那是什么? – Cerbrus

相关问题