javascript中判断字符串是否以指定字符串开始或结尾
我们都知道Java中的String提供了⽤于判断是否以指定字符串开头、结尾的⽅法。分别是startWith和endWith,但是最近开发过程中我也遇到了类似的问题只不过是在javascript中,需要判断⼀个链接地址是否以http://开头或判断⼀个地址是否以\"/\"开头。
但是通过查看API,原⽣的javascript的String并没有提供现成的办法来解决此类需求。因此我就开始想办法如何能够正确的判断某个字符串是否以指定的字符串开始或者结尾。 后来终于找到了好的办法,特记录如下。
我会⾸先将代码和测试⽤例贴上,然后再具体解释为什么要这么写
//判断当前字符串是否以str开始 先判断是否存在function是避免和js原⽣⽅法冲突,⾃定义⽅法的效率不如原⽣的⾼ if (typeof String.prototype.startsWith != 'function') String.prototype.startsWith = function (str){ return this.slice(0, str.length) == str; }; }
//判断当前字符串是否以str结束
if (typeof String.prototype.endsWith != 'function') { String.prototype.endsWith = function (str){ return this.slice(-str.length) == str; }; }
//测试程序
var sCompareStr = \"abcdefg123\";//⽐较字符串 var sBeCompareStr = \"fg\";//被⽐较字符串
if(sCompareStr.endsWith(sBeCompareStr)){//这⾥可以替换为startsWith alert(sCompareStr+\" 是以:\"+sBeCompareStr+\" 结束\"); }else{
alert(sCompareStr+\" 不是以:\"+sBeCompareStr+\" 结束\"); }
这样书写的原因:
1. 之所以在将整个代码放在if判断中是因为避免以后原⽣的js版本中增加了同类⽅法⽽导致代码效率降低。因为对于同名⽅法来说,js原⽣的代码效率要⾼于⽤户⾃⼰扩展的⽅法
2. 之所以使⽤slice⽅法⽽不使⽤indexof⽅法,是由于indexof⽅法在处理较长的字符串时效率⽐较低
最后注明⼀下版权,本⽂由yutiansanshou原创发表,你可以任意转载,但必需在明显位置注明作者和出处,⽽且不能⽤于任何商业⽤途