今日、次のリクエストを受け取りました。
1. テキストを入力し、出力テキストをインターセプトし、400 文字を保持します。
2. インターセプトされたコンテンツが URL である場合は、完全な URL アドレスを保持します。省略記号。....
----
URL を保持するのはさらに面倒です。特に 2 つの同一の URL がある場合、indexOf を使用してそれらの文字位置を取得することはできません。
処理結果:
関連コード:
String.prototype.sizeAt = function(){
var nLen = 0;
for(var i = 0, end = this.length; inLen = this .charCodeAt(i)>128?2:1;
}
return nLen>}
String.prototype.cutStr = function(n, sCut){
if(this .sizeAt( ) <= n){
これを返します;
sCut = sCut ||
var max = n-sCut.sizeAt(); = 0;
var s = this;
for(var i =0,end = this.length;inLen = this.charCodeAt(i)>128?2 :1;
if(nLen>max){
s = this.slice(0,i);
s = sCut; return s.toString();
};
String.prototype.cutStrButUrl = function(n, sCut){
if(this.sizeAt() <=n){
これを返します。 toString() ;
sCut = sCut || "";
var s = this;
var aUrl = s.match(/https?://[a-zA-Z0-9] (.[a-zA-Z0-9] ) ([-_A-Z0-9a-z$. ! */ ,:;@&=?~#%]*)*/gi);
//最大文字数が URL の間にある場合、bCut は flase;
var bCut = true; 🎜>if(aUrl){
//各 URL を判定
for(var i=0, endI = aUrl.length;ivar sUrl = aUrl[ i]; 🎜>// 2 つの同一の URL が存在する可能性があります
var aP = s.split(sUrl);
var nLenURL = sUrl.sizeAt(); ;
for(j = 0, endJ = aP.length; jnCurr =aP[j].sizeAt(); sResult = sUrl;
//現在の単語数は max 未満ですが、URL を追加すると max を超えます: URL はインターセプトされます
if(nCurr < max && nCurr nLenURL>max){
s = sResult sCut;
break;
nCurr = nLenURL;
if(bCut === false)
};
}
if(bCut){
s = s.cutStr(n, sCut);
return s.toString() ; ;
console.log('通常の 20 文字のインターセプト'.cutStrButUrl(20,'...'));
console.log('通常の 20 文字のインターセプトですが、'.cutStrButUrl(20) ,'...'));
console.log('URL http://www.baidu.com の文字列を傍受できますか? '.cutStrButUrl(20,'...'));
console.log('http://www.baidu.com には同じ URL http://www.baidu.com? ' の文字列が 2 つあります。 CutStrButUrl(51, '...'));