V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  colonel  ›  全部回复第 1 页 / 共 1 页
回复总数  13
2020-11-09 19:23:41 +08:00
回复了 Windsooon 创建的主题 推广 回馈论坛|海外兔抽奖
+1
2018-12-03 09:55:18 +08:00
回复了 pwstrick 创建的主题 前端开发 赠送 6 本《前端程序员面试笔试真题库》
分母
我来组成分母~
2018-07-26 11:45:51 +08:00
回复了 levie 创建的主题 分享创造 Snipaste 2.0 专业版发布!公布捐赠数据 & 送码
支持国产优秀软件~
2017-10-24 11:09:19 +08:00
回复了 MOS 创建的主题 推广 老子今天不加班, 1024 程序员节,美团云福利大放送!
我是程序员,1024 这天我想对你说,不放假的节日都是耍流氓~
2333
2015-10-19 13:45:28 +08:00
回复了 ericwang0717 创建的主题 推广 送 10 本 JavaScript 忍者秘籍略表心意!
梦想总是要有的!
2015-08-26 11:57:18 +08:00
回复了 jtam 创建的主题 JavaScript 有偿求助,注册页面的图形验证码刷新
passport-signup.html

function sendVerify (el, data ) {
var url = el.href;
var textCont = el.getElement ('span span');
el.addClass ('disabled');
textCont.innerHTML = el.get ('text') + '(<i>0</i>)';
var cd = new countdown (textCont.getElement ('i'), {
start: 120,
secondOnly: true,
callback: function (e ) {
el.removeClass ('disabled');
textCont.innerHTML = '重发验证码';
}
});
Query.send (url, el, data, function (rs ) {
if (rs.error ) {
changeCode (Module.element (modname, 'img.auto-change-verify-handle'));
cd.stop ();
el.removeClass ('disabled');
textCont.innerHTML = '重发验证码';
}
});
}
2014-12-24 13:52:25 +08:00
回复了 esplendo 创建的主题 推广 乐享圣诞,喜迎新年抽奖活动(截止日期: 2015.1.2)
75918
2014-11-28 16:55:51 +08:00
回复了 esplendo 创建的主题 推广 有你,真好! Think In Cloud 感恩抽奖活动(截止日期: 12.3)
24
2012-10-17 12:18:27 +08:00
回复了 enj0y 创建的主题 程序员 JS求助
按你的思路简单改了下:

function sub_html_restr(str, num)
{
var reg = new RegExp( '<[^>]+>' , 'g' );
var rt, rts = [], indexs = [], tstr, endstr, rstr, sstr, endtag, rtstr, restr;

//提取所有的html标签和标签在字符串中的位置
while ( ( rt = reg.exec(str) ) != null )
{
rts.push(rt[0]);
indexs.push(rt['index']);
}

//删除字符串中所有的html标签
tstr = str.replace(reg, '');
//对剩余的纯字符串进行substr

sstr = tstr.substr(num, tstr.length);
tstr = tstr.substr(0, num);



//判断有没有把实体腰斩,如果有腰斩的就再接上
endstr = (/&[^&]*$/.exec(tstr) || '');
if ( endstr !== '' ) endstr += '' + (/^[^;]*;/.exec(sstr) || '');
if (/^(&\w{1,10};|&#\d+;)$/.test(endstr))
{
rtstr = tstr.replace(/&[^&]*$/, endstr);
}
else
{
rtstr = tstr;
}

//把html标签放回到截断完毕的字符串中,当然有的html标签这时候已经无家可归了

var index = 0;

for (var i = 0; i < rts.length; i ++)
{
index = indexs[i];
if (rtstr.length >= index)
{
rtstr = rtstr.substr(0, index) + rts[i] + rtstr.substr(index, rtstr.length);
}
else
{
break;
}
}

restr = str.substr(rtstr.length,str.length)

//把闭合的标签全部删除
tstr = restr;
rstr = '';
while ( rstr != tstr )
{
rstr = tstr;
tstr = tstr.replace(/<[^\/][^>]*>[^<]*<\/[^>]+>/g, '').replace(/<[^>]+ \/>/g, '');
}

var lastindex = i ;
var endreg = new RegExp('<\/([^>]+)>', 'g');
var tagreg = new RegExp('<?([^ >]+)[ ]?[^ ]*>?');
//如果存在没有闭合的标签,从切断的标签里找上半身
while( (endrt = endreg.exec(tstr))!=null){
for(var i = lastindex-1;i>-1;i--){
if(tagreg.exec(rts[i])[1]==tagreg.exec(endrt[1])[1]){
restr = rts[i] + restr;
lastindex = i;
break;
}
}
}
return restr;
}

</script>
<script>
document.writeln('<textarea cols="100" rows="10">');
document.writeln(sub_html_restr('<xx><oo>嵌套标签截断测试</oo><fk><test>lala</test></fk></xx>', 5));
document.writeln(sub_html_restr('正常字符串测试', 5));
document.writeln(sub_html_restr('<xx>带标签的字符串截断</xx>', 5));
document.writeln(sub_html_restr('<xx><oo>嵌套标签截断测试</oo><fk>lala</fk></xx>', 5));
document.writeln(sub_html_restr('<xx><oo>嵌套标签<img src="http://www.google.com/logo.gif" />截断测试</oo></xx>', 5));
document.writeln(sub_html_restr('<xx><oo>实体截断&nbsp;测试测试</oo></xx>', 5));
document.writeln(sub_html_restr('<xx><oo>实体截断&nbsp;测试测试</oo></xx>', 5));
document.writeln('</textarea>');
</script>

但是,这里有个bug,你没有存储标签的配对,所以遇到document.writeln(sub_html_restr('<xx><oo><oo a=1></oo>截断测试测试</oo></xx>', 5));这种就没办法了.
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4804 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 32ms · UTC 05:38 · PVG 13:38 · LAX 21:38 · JFK 00:38
Developed with CodeLauncher
♥ Do have faith in what you're doing.