求简单js正则

sunxingtao 2011-10-24 05:21:49
如果字符串中存在LETTER-SPACING,将LETTER-SPACING: npt;替换为n*2pt
如LETTER-SPACING: -5pt; 替换为LETTER-SPACING: -10pt;
如LETTER-SPACING: 3pt; 替换为LETTER-SPACING: 6pt;

<P style="TEXT-ALIGN: center; LINE-HEIGHT: 55pt; mso-line-height-rule: exactly" class=MsoNormal align=center><SPAN style="FONT-FAMILY: 华文新魏; LETTER-SPACING: -5pt; COLOR: red; FONT-SIZE: 43pt; mso-font-kerning: 5.0pt">能在自己的航海图上标注上之前成功的船队的航行路线<SPAN lang=EN-US><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></SPAN></P>
...全文
175 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
咸鱼boris 2011-10-25
  • 打赏
  • 举报
回复
呵呵,我发现了,自己问题,'^...$'开始结尾标志不加就可以了,lz对不住了
sunxingtao 2011-10-25
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 sharkdbj 的回复:]

LZ好偏心
[/Quote]

对不起您了 分太少
而且您那个确实不好用,要不您亲自用长的字符串试下


var re = /^LETTER-SPACING\:\s*(\-?\d)pt$/g;
var str='<P style="TEXT-ALIGN: center; LINE-HEIGHT: 55pt; mso-line-height-rule: exactly" class=MsoNormal align=center><SPAN style="FONT-FAMILY: 华文新魏; LETTER-SPACING: 5pt; COLOR: red; FONT-SIZE: 43pt; mso-font-kerning: 5.0pt">能在自己的航海图上标注上之前成功的船队的航行路线<SPAN lang=EN-US><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></SPAN></P>';
str = str.replace(re,function(){
return "LETTER-SPACING:" + 2*parseInt(arguments[1]) + "pt"
});
alert(str);
咸鱼boris 2011-10-25
  • 打赏
  • 举报
回复
LZ好偏心
sunxingtao 2011-10-25
  • 打赏
  • 举报
回复
各位很给力 谢谢了

就是分给少了 不好意思

这两天求正则学很多,谢谢所有帮助我的人
daols 2011-10-24
  • 打赏
  • 举报
回复
parseInt是取整吧...考虑到有小数的可能...我觉得Number()好点...改了一下正则...
javascript:  
var strObj='<P style="TEXT-ALIGN: center; LINE-HEIGHT: 55pt; mso-line-height-rule: exactly" class=MsoNormal align=center><SPAN style="FONT-FAMILY: 华文新魏; LETTER-SPACING: -5.2pt; COLOR: red; FONT-SIZE: 43pt; mso-font-kerning: 5.0pt">能在自己的航海图上标注上之前成功的船队的航行路线<SPAN lang=EN-US><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></SPAN></P>';
alert(strObj.replace(/(LETTER-SPACING\:\s*[+-]?)([\d\.]{1,})pt\;/gi,function(){return arguments[1]+(Number(arguments[2])*2)+'pt\;';})); void(0);
daols 2011-10-24
  • 打赏
  • 举报
回复
谢谢lijpwsw啊...受教了...没用过arguments[1]这种...我以前一直以为只有vbs里有arguments呢...= =!!
Crazywa 2011-10-24
  • 打赏
  • 举报
回复

var str = '<P style="TEXT-ALIGN: center; LINE-HEIGHT: 55pt; mso-line-height-rule: exactly" class=MsoNormal align=center><SPAN style="FONT-FAMILY: 华文新魏; LETTER-SPACING: -5pt; COLOR: red; FONT-SIZE: 43pt; mso-font-kerning: 5.0pt">能在自己的航海图上标注上之前成功的船队的航行路线<SPAN lang=EN-US><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></SPAN></P>';
var str1 = str.replace(/LETTER-SPACING:\s*(-?\d*)/gi,function(a,p1){return 'LETTER-SPACING:'+Number(p1)*2});
alert(str1);

抄袭了一下
lijpwsw 2011-10-24
  • 打赏
  • 举报
回复
'$1'+(Number('$2')*2)+'pt\;'

这样做会让Number直接去转换$2造成转换失败

这个应该是js替换的时候内部机制的问题
lijpwsw 2011-10-24
  • 打赏
  • 举报
回复
'$1'+(Number('$2')*2)+'pt\;'))

这样做貌似Number没有把$2当做5处理而是当做$2的字符串处理?
lijpwsw 2011-10-24
  • 打赏
  • 举报
回复


var strObj='<P style="TEXT-ALIGN: center; LINE-HEIGHT: 55pt; mso-line-height-rule: exactly" class=MsoNormal align=center><SPAN style="FONT-FAMILY: 华文新魏; LETTER-SPACING: -5pt; COLOR: red; FONT-SIZE: 43pt; mso-font-kerning: 5.0pt">能在自己的航海图上标注上之前成功的船队的航行路线<SPAN lang=EN-US><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></SPAN></P>';
alert(strObj.replace(/(LETTER-SPACING\:\s*[+-]?)(\d{1,})pt/gi,function(){ return arguments[1]+parseInt(arguments[2])*2 + 'pt'; }));

daols 2011-10-24
  • 打赏
  • 举报
回复
正则匹配倒是没问题...就是计算方法上有问题...算不出正常数值...
javascript:
var strObj='<P style="TEXT-ALIGN: center; LINE-HEIGHT: 55pt; mso-line-height-rule: exactly" class=MsoNormal align=center><SPAN style="FONT-FAMILY: 华文新魏; LETTER-SPACING: -5pt; COLOR: red; FONT-SIZE: 43pt; mso-font-kerning: 5.0pt">能在自己的航海图上标注上之前成功的船队的航行路线<SPAN lang=EN-US><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></SPAN></P>';
alert(strObj.replace(/(LETTER-SPACING\:\s*[+-]?)(\d{1,})pt\;/gi,'$1'+(Number('$2')*2)+'pt\;')); void(0);
lijpwsw 2011-10-24
  • 打赏
  • 举报
回复
楼上正解


var str = '<P style="TEXT-ALIGN: center; LINE-HEIGHT: 55pt; mso-line-height-rule: exactly" class=MsoNormal align=center><SPAN style="FONT-FAMILY: 华文新魏; LETTER-SPACING: -5pt; COLOR: red; FONT-SIZE: 43pt; mso-font-kerning: 5.0pt">能在自己的航海图上标注上之前成功的船队的航行路线<SPAN lang=EN-US><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></SPAN></P>'
var rule = /LETTER-SPACING\:\s*(\-?\d)pt/g;
rst = str.replace(rule,function(){
alert(arguments[1]);
return "LETTER-SPACING:" + 2*parseInt(arguments[1]) + "pt"
});
alert(rst);
咸鱼boris 2011-10-24
  • 打赏
  • 举报
回复

var re = /^LETTER-SPACING\:\s*(\-?\d)pt$/g;
var str = 'LETTER-SPACING: -5pt';
str = str.replace(re,function(){
return "LETTER-SPACING:" + 2*parseInt(arguments[1]) + "pt"
});
alert(str);
dqm12345678 2011-10-24
  • 打赏
  • 举报
回复
同楼上!
kyzy_yy_pm 2011-10-24
  • 打赏
  • 举报
回复
你可通过stringObj.indexOf()结合substring来完成,很简单的,你了解下这两个函数吧

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧