2016-11-29 77 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

相關問題