`
yl.fighter
  • 浏览: 253157 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

看到PHP的一道面试题, 做了下, 不知道还有没好点方法

    博客分类:
  • Web
阅读更多
题目如下,
类似这样的aaa<em>sss</em>ddd字符串,写个函数CutStr($str,$max)实现截取:
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>标签

我的第一反应就是正则, 然后就...
var str = "aaa<em>sss</em>ddd";

function cutStr(str, max) {
    // 首先把<em>和</em>先给剔除, 然后记录他们的位置
    var reg = new RegExp("(.*?)<em>(.*?)</em>(.*?)"); 
    var emSub = str.indexOf("<em>");
    var em2Sub = str.indexOf("</em>");
    var newstr = str.replace(reg, "$1$2$3");

    // 如果不是数字或是负数, 或者大于字符长度, 直接返回原字符
    if (!/^\d+$/.test(max) || max >= newstr.length) return str; 

    newstr = newstr.substring(0, max);
    if (max <= emSub) { //小于三
        return newstr;
    } else if (max <= em2Sub - 4 && max > emSub) { // 大于三, 小于六时(注: -4 是为了减去第一个<em>占去的位置)
        var tempReg = new RegExp("(\\w{" + emSub + "})(\\w*?)");
        return newstr.replace(tempReg, "$1<em>$2");
    } else { // 大于六
        var tempReg = new RegExp("(\\w{" + emSub + "})(\\w{" + (em2Sub - emSub - 4) + "}?)(\\w*?)");
        return newstr.replace(tempReg, "$1<em>$2</em>$3");
    }
}

alert(cutStr(str, 7));​


觉得这个方法好笨, 有什么别的好点的方法吗?

想到了,, 原来这个这么简单,, 我把它想复杂了...

var str = "aaa<em>sss</em>ddd";  
  
function cutStr(str, max) {  
    var emSub = str.indexOf("<em>");  
    var em2Sub = str.indexOf("</em>");  
    // 如果不是数字或是负数, 或者大于字符长度, 直接返回原字符  
    if (!/^\d+$/.test(max) || max >= str.length - 9) return str; 
    else if(max > em2Sub-4) return str.substring(0, max + 9);
    else if(max > emSub) return str.substring(0, max + 4);
    else return str.substring(0, max);
}  
  
alert(cutStr(str, 7));  ​
分享到:
评论
1 楼 mengjie133233 2014-04-29  
貌似那个js版本的不对啊

相关推荐

    一道关于php变量引用的面试题

    php面试题题目如下: 复制代码 代码如下: &lt;?php $a = 1; $x =&$a; $b=$a++; ?&gt; 问: $b和$x的值分别是什么? php面试题的答案如下: $b = 1; $x = 2; 明白了吗? 没明白,再好好想想。 当一个变量等于另一个变量...

    vue高级面试题2023

    最近拿到一套高级前端的Vue面试题,从头往下看了一遍,居然大部分都是一知半解的,遂准备一道一道的认真学习总结,立志做一位Vue高级开发者! 看一下你是否也对上面的34个问题一知半解,如果和我差不多的话就来...

    用PHP解决的一个栈的面试题

    遇到一道面试题,题目大概意思如下: 使用两个普通栈实现一个特殊栈,使得pop、push、min三个函数的都是复杂度为O(1)的操作,min函数是获得当前栈的最小值。 初步想法 1.要实现min函数为(1)操作,当时第一想法是事先...

    PHP不用第三变量交换2个变量的值的解决方法

    以前做过一道php面试题是这样的:不使用第三个变量实现交换两个变量的值。一般都是借助第三个中间变量来实现原来两个变量的值交换,但是这道题却要求不能使用中间变量,这对于初学者来说也算是一个难题了。网上找到...

    一道求$b相对于$a的相对路径的php代码

    php面试题的题目: $a = ‘/a/b/c/d/e.php’; $b = ‘/a/b/12/34/c.php’; //计算出 $b 相对于 $a 的相对路径应该是 ../../c/d php面试题的答案: 复制代码 代码如下: function getRelative($a,$b) { $arr = explode...

    PHP读取目录树的实现方法分析

    前一阵时间面试XX公司笔试题中竟然有这样一道题: 使用PHP列出目录树! 当时一看就懵逼了!基本的思路还是有的,不过是使用递归算法,但对PHP操作目录文件的方法却不是很了解,所以今天好好补习一下! 解题思路: 1....

    PHP合并数组的2种方法小结

    但最近我在换工作的时候遇到一道合并数组的面试题,我当时想的是将两个数组先转化为字符串,合并后再转化为数组输出,面试官说这个思路不太对,完了bulabula讲了一下数组基础的东西,然后确实是因为经验问题,或者是...

    PHP设计模式入门之迭代器模式原理与实现方法分析

    在深入研究这个设计模式之前,我们先来看一道面试题,来自鸟哥的博客, 题目是这样的: 使对象可以像数组一样进行foreach循环,要求属性必须是私有。 不使用迭代器模式很难实现,先看实现的代码: sample.php &lt;?...

    PHP依赖注入原理与用法分析

    依然是来自到喜啦的一道面试题,你知道什么是依赖注入吗? 依赖注入(DI)的概念虽然听起来很深奥,但是如果你用过一些新兴的php框架的话,对于DI一定不陌生,因为它们多多少少都用到了依赖注入来处理类与类之间的...

    PHP递归创建多级目录

    本文主要介绍了PHP递归创建多级目录,这是一道经典的php程序员面试题,分享了解题过程和思路,需要的朋友可以参考一下

    PHP实现的多维数组排序算法分析

    突然想起了一道面试题,把一个多维数组排序。 例: &lt;?php //有一个多维数组 $a = array( array('key1'=&gt;940, 'key2'=&gt;'blah'), array('key1'=&gt;23, 'key2'=&gt;'this'), array('key1'=&gt;894, 'key2'=&gt;'that') ); ...

    php单例模式实现(对象只被创建一次)

    是我在php面试题中遇到的一道试题,单例模式按字面来看就是某一个类只有一个实例,这样做的好处还是很大的,比如说数据库的连接,我们只需要实例化一次,不需要每次都去new了,这样极大的降低了资源的耗费

    10条PHP编程习惯助你找工作

    在面试之间,我和其主要的程序员们在咨询电话中聊了聊,最后他们给我出了一套测试题,其中有一道很耐人寻味。  找出以下代码的错误之处:&lt;?function baz($y $z) { $x = new Array(); $x[sales] = 60; $x[profit]...

Global site tag (gtag.js) - Google Analytics