题目如下,
类似这样的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));
分享到:
相关推荐
笔试面试题 一道面试题关于信息系统的问答和注意事项 【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的...
这道面试题涉及到了PHP变量引用的基本原理以及预增量操作符(++)的使用。让我们详细探讨一下这个问题。 首先,看给定的PHP代码: ```php $a = 1; $x =&$a; $b=$a++; ``` 在这段代码中,我们创建了一个变量 `$a` ...
4. stream_get_meta_data函数的使用:该函数可以获取流的相关元数据,包括是否还有未读数据、流是否过期、流是否被阻挡以及传输的数据量等,但不能获取流的构建成分。答案是E。 5. PHP脚本写入文件内容:这段代码...
23. 这是一道数学题,通过逆向推理可以得出共有31个苹果。每个人拿走1/5后,剩下的苹果数都能被5整除,最后剩下1个苹果,说明初始苹果数减去1后是5的倍数,同时每个人拿走4个苹果后剩下1个,所以初始苹果数减去4的...
下面将详细解析每一道题目涉及的知识点: 1. **基础题** - **比较运算符**:在PHP中,`==` 是宽松比较,它会忽略类型,只比较值。因此,`null == false` 和 `'' == 0` 都是相等的。而 `===` 是严格比较,既比较值...
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...
前一阵时间面试XX公司笔试题中竟然有这样一道题: 使用PHP列出目录树! 当时一看就懵逼了!基本的思路还是有的,不过是使用递归算法,但对PHP操作目录文件的方法却不是很了解,所以今天好好补习一下! 解题思路: 1....
但最近我在换工作的时候遇到一道合并数组的面试题,我当时想的是将两个数组先转化为字符串,合并后再转化为数组输出,面试官说这个思路不太对,完了bulabula讲了一下数组基础的东西,然后确实是因为经验问题,或者是...
LeetCode是一个在线平台,提供了大量的编程练习题,旨在帮助程序员提升算法技能和准备面试。在这个题解中,我们将深入探讨如何用PHP来解决这个问题。 “分发饼干”这道题目通常是面试中用来考察程序员解决贪心算法...
依然是来自到喜啦的一道面试题,你知道什么是依赖注入吗? 依赖注入(DI)的概念虽然听起来很深奥,但是如果你用过一些新兴的php框架的话,对于DI一定不陌生,因为它们多多少少都用到了依赖注入来处理类与类之间的...
突然想起了一道面试题,把一个多维数组排序。 例: <?php //有一个多维数组 $a = array( array('key1'=>940, 'key2'=>'blah'), array('key1'=>23, 'key2'=>'this'), array('key1'=>894, 'key2'=>'that') ); ...
LeetCode是一个在线平台,提供了大量编程题目来帮助开发者提升技能,而“搜索二维矩阵”是其中的一道算法题。这个压缩包很可能是某位开发者分享的解决方案,旨在帮助其他学习者理解和解决此类问题。 在PHP中,处理...
在面试之间,我和其主要的程序员们在咨询电话中聊了聊,最后他们给我出了一套测试题,其中有一道很耐人寻味。 找出以下代码的错误之处:<?function baz($y $z) { $x = new Array(); $x[sales] = 60; $x[profit]...