2009-11-19 184 views
231

可能重复:
Javascript StartsWith检查字符串是否以某种东西开始?

我知道,我可以这样做^ =以查看是否有ID的东西开始,我尝试使用,对于这一点,但它没”将不起作用......基本上,我检索的URL,我想设置为以某种方式开始的路径名元素的类...

所以,

var pathname = window.location.pathname; //gives me /sub/1/train/yonks/459087 

我想确保所有以/分/ 1开始的路径,我可以设置一个类的元素...

if(pathname ^= '/sub/1') { //this didn't work... 
     ... 
+0

'/^\/sub \/1。* $/gi.test(pathname)'将返回一个布尔值作为谓词。 – 2016-06-23 14:12:19

+1

如果你沮丧年以后来到这里(我自己)的[原创与复制后的Javascript StartsWith(http://stackoverflow.com/questions/646628/how-to-check-if-a-string-startswith-另一个字符串)提供了一个非常简洁的答案,使用Ecmascript 6 startWith()函数,似乎有最好的表现。 – theFreedomBanana 2016-09-22 07:36:19

回答

341

使用stringObject.substring

if (pathname.substring(0, 6) == "/sub/1") { 
    // ... 
} 
+15

-1:创建一个额外的冗余字符串。 – user1071136 2013-01-17 19:57:36

+9

这是一个测试用例:http://jsperf.com/starts-with/2。子串方法似乎是我的机器上最快(使用V8)。 – Pijusn 2013-07-20 19:34:36

+19

这可以由更通用的,如下所示: 'VAR X = “/分/ 1”; 如果(pathname.substring(0,x.length)=== X){ // ... };'。这样你就不再依赖知道'x'的长度,因为它可能会改变。 – 2015-07-12 11:34:32

79

您可以使用string.match()并为此正则表达式太:如果发现

if(pathname.match(/^\/sub\/1/)) { // you need to escape the slashes 

string.match()将返回匹配的子字符串数组,否则

+22

+1有什么办法在expr中动态插入一个url字符串?例如在URL中转义/? – Mercurybullet 2011-11-09 21:54:25

+0

的长度,创建一个新的字符串本身:) – Tjorriemorrie 2013-07-11 13:04:32

+1

@Tjorriemorrie您可以使用正则表达式类来实现这一点,像VAR reUrlTester =新的正则表达式(your_url_string);如果(reUrlTester.test(url)){//使用测试函数来查看url是否匹配。 – Cros 2013-08-05 11:02:25

34

多一点可重复使用的功能:

beginsWith = function(needle, haystack){ 
    return (haystack.substr(0, needle.length) == needle); 
} 
170
String.prototype.startsWith = function(needle) 
{ 
    return this.indexOf(needle) === 0; 
}; 
+9

-1看评论这里的正当理由不使用这种类型的实现:HTTP:// stackoverflow.com/a/1978419/560287 – 2013-03-30 23:46:25

+12

+1 indexOf是完美的!我只建议不要将方法添加到您不拥有的对象。 – collimarco 2013-08-03 17:15:48

+1

这是一个完美的答案(indexOf事物)比被标记为答案的答案。 – 2013-08-07 00:05:24

22

首先,让延长字符串对象。感谢里卡多佩雷斯的原型,我认为使用变量'字符串'比'针'更好的可读性。

String.prototype.beginsWith = function (string) { 
    return(this.indexOf(string) === 0); 
}; 

然后你就这样使用它。警告!使代码非常可读。

var pathname = window.location.pathname; 
if (pathname.beginsWith('/sub/1')) { 
    // Do stuff here 
} 
+4

不是真的添加任何东西。 – ratbum 2013-09-11 08:48:12

+0

恕我直言,** **的indexOf搜索整个字符串,如果没有找到在其开始立即匹配:所以它的低效率的增长非常长的字符串进行搜索。 – 2017-04-08 00:14:29

相关问题