2017-10-04 91 views
0

我知道這個問題與THIS很相似,所以如果認爲是重複的道歉。用jquery/regex替換子字符串中的最後一個匹配的字符

我想要達到的效果是檢查的div類畫廊,信息

$('.gallery-info').each(function() { 

}); 

我設置了一個條件,返回一個字符串,如果每個div的字符數大於140個字符。 (Twitter)上

$('.gallery-info').each(function() { 
    var descLength = 140; 
    var str = $(this).text(); 
    var patt = new RegExp(/[,;.:!()&\s$]/g); 

    if (str.length > descLength) { 
    $(this).text(str.substr(0, descLength) + "..."); 
    } 
}); 

IF

的子串的最後一個字符的PATT無功相匹配。 返回子-1和CONCAT「......」

ELSE

返回字符串和CONCAT「......」

我一直有這個大腦放屁,我相信我可以用str.replace()和str.charAt()在Vanilla JS中實現,但是我需要在jQuery中做到這一點。

回答

1

我想更新您如果與以下條件應該工作正常。

if (str.length > descLength) { 
     if(patt.test(str[descLength-1])) { 
      $(this).text(str.substr(0, descLength-1) + "..."); 
     } else { 
      $(this).text(str.substr(0, descLength) + "...");  
     } 
    } 

CODEPENhttps://codepen.io/azimjs/pen/mBqjNY

+0

謝謝你。我知道我在正確的軌道上。拯救生命。 –

1

我認爲這是按照你所描述的。

$('.gallery-info').each(function() { 
    var descLength = 140; 
    var str = $(this).text(); 
    var patt = new RegExp(/[,;.:!()&\s$]/g); 
    if (str.length > descLength) { 
    var substring = str.substr(0, descLength); 
    var lastChar = substring[substring.length-1]; 
    if (lastChar.match(patt)) { 
     $(this).text(str.substr(0, descLength -1) + "..."); 
    } else { 
     $(this).text(str.substr(0, descLength) + "..."); 
    } 
    } 
}); 

Codepen

https://codepen.io/foozie3moons/pen/GMOBvw

+0

感謝您的回答。不過,我認爲不必分割字符串,因爲字符串本身就是字符數組。 –

+0

你說得對,我更新了我的答案/ codepen。 – Matthew

+0

這種方法也適用!愛它。 –

相關問題