亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2022 | 回復: 1
打印 上一主題 下一主題

看到騰訊PHP的一道面試題, 做了下, 不知道還有沒好點方法 [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2012-03-11 18:42 |只看該作者 |倒序瀏覽
看到騰訊PHP的一道面試題, 做了下, 不知道還有沒好點方法









題目如下,
類似這樣的aaa<em>sss</em>ddd字符串,寫個函數(shù)CutStr($str,$max)實現(xiàn)截。
1)如果$max大于$str的長度則返回$str
2)<em>和</em>不包含在長度計算范圍。
例:
如果CutStr("aaa<em>sss</em>ddd",6) 則返回aaa<em>sss</em>.
如果CutStr("aaa<em>sss</em>ddd",4) 則返回aaas,不包含<em>標簽

我的第一反應就是正則, 然后就...

Js代碼
  1. 1.var str = "aaa<em>sss</em>ddd";   
  2. 2.  
  3. 3.function cutStr(str, max) {   
  4. 4.    // 首先把<em>和</em>先給剔除, 然后記錄他們的位置   
  5. 5.    var reg = new RegExp("(.*?)<em>(.*?)</em>(.*?)");   
  6. 6.    var emSub = str.indexOf("<em>");   
  7. 7.    var em2Sub = str.indexOf("</em>");   
  8. 8.    var newstr = str.replace(reg, "$1$2$3");   
  9. 9.  
  10. 10.    // 如果不是數(shù)字或是負數(shù), 或者大于字符長度, 直接返回原字符   
  11. 11.    if (!/^\d+$/.test(max) || max >= newstr.length) return str;   
  12. 12.  
  13. 13.    newstr = newstr.substring(0, max);   
  14. 14.    if (max <= emSub) { //小于三   
  15. 15.        return newstr;   
  16. 16.    } else if (max <= em2Sub - 4 && max > emSub) { // 大于三, 小于六時(注: -4 是為了減去第一個<em>占去的位置)   
  17. 17.        var tempReg = new RegExp("(\\w{" + emSub + "})(\\w*?)");   
  18. 18.        return newstr.replace(tempReg, "$1<em>$2");   
  19. 19.    } else { // 大于六   
  20. 20.        var tempReg = new RegExp("(\\w{" + emSub + "})(\\w{" + (em2Sub - emSub - 4) + "}?)(\\w*?)");   
  21. 21.        return newstr.replace(tempReg, "$1<em>$2</em>$3");   
  22. 22.    }   
  23. 23.}   
  24. 24.  
  25. 25.alert(cutStr(str, 7));​  
  26. var str = "aaa<em>sss</em>ddd";

  27. function cutStr(str, max) {
  28.     // 首先把<em>和</em>先給剔除, 然后記錄他們的位置
  29.     var reg = new RegExp("(.*?)<em>(.*?)</em>(.*?)");
  30.     var emSub = str.indexOf("<em>");
  31.     var em2Sub = str.indexOf("</em>");
  32.     var newstr = str.replace(reg, "$1$2$3");

  33.     // 如果不是數(shù)字或是負數(shù), 或者大于字符長度, 直接返回原字符
  34.     if (!/^\d+$/.test(max) || max >= newstr.length) return str;

  35.     newstr = newstr.substring(0, max);
  36.     if (max <= emSub) { //小于三
  37.         return newstr;
  38.     } else if (max <= em2Sub - 4 && max > emSub) { // 大于三, 小于六時(注: -4 是為了減去第一個<em>占去的位置)
  39.         var tempReg = new RegExp("(\\w{" + emSub + "})(\\w*?)");
  40.         return newstr.replace(tempReg, "$1<em>$2");
  41.     } else { // 大于六
  42.         var tempReg = new RegExp("(\\w{" + emSub + "})(\\w{" + (em2Sub - emSub - 4) + "}?)(\\w*?)");
  43.         return newstr.replace(tempReg, "$1<em>$2</em>$3");
  44.     }
  45. }

  46. alert(cutStr(str, 7));​
復制代碼
覺得這個方法好笨, 有什么別的好點的方法嗎?

想到了,, 原來這個這么簡單,, 我把它想復雜了...


Js代碼
  1. 1.var str = "aaa<em>sss</em>ddd";     
  2. 2.     
  3. 3.function cutStr(str, max) {     
  4. 4.    var emSub = str.indexOf("<em>");     
  5. 5.    var em2Sub = str.indexOf("</em>");     
  6. 6.    // 如果不是數(shù)字或是負數(shù), 或者大于字符長度, 直接返回原字符     
  7. 7.    if (!/^\d+$/.test(max) || max >= str.length - 9) return str;   
  8. 8.    else if(max > em2Sub-4) return str.substring(0, max + 9);   
  9. 9.    else if(max > emSub) return str.substring(0, max + 4);   
  10. 10.    else return str.substring(0, max);   
  11. 11.}     
  12. 12.     
  13. 13.alert(cutStr(str, 7));  ​
復制代碼

論壇徽章:
0
2 [報告]
發(fā)表于 2012-03-11 20:56 |只看該作者
謝謝分享
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP