2016-03-11 88 views
2

使用JavaScript,如果另一个字符串以第一个字符串开头,如何从其他字符串剥离字符串?从其他字符串剥离字符串(如果它使用JavaScript开头)

var matcher='Hello'; 

var s1='hello everyone'; 
console.log(someFunction(s1,matcher); 
//Should return ' everyone', and should be case insensitive 

var s2='xhello everyone'; 
console.log(someFunction(s2,matcher); 
//Should return nothing (either NULL or FALSE or "" would be fine) since s2 doesn't start with 'Hello' 

演示了三个答案:https://jsfiddle.net/dynvgn1k/

+0

搜索第一个字符串,并用'nothing'替换( “”)。 –

+0

@noob如何强制它从一开始就开始? – user1032531

+0

使用'^'。这从开始就被称为锚定。它会在字符串的开头寻找你的匹配。 –

回答

2

没有必要使用正则表达式只需使用:

s1.toLowerCase().indexOf(matcher.toLowerCase()) === 0 && s1.substr(matcher.length) 
//=> everyone 

matcher='hi' 
s1.toLowerCase().indexOf(matcher.toLowerCase()) === 0 && s1.substr(matcher.length) 
//=> false 

使用toLowerCase将使它忽略大小写比较。 indexOf返回搜索字符串在主题和位置中的位置0表示搜索字在开始处找到。

+0

当然看起来很简单!介意解释它是如何工作的? – user1032531

+0

是的,我刚刚在回答中加入了它。 – anubhava

+0

啊,所以这只会验证字符串是否以另一个字符串开头。我希望我将不得不找到第二个字符串的长度,并从第一个字符串返回很多字符? – user1032531

2

一个简单的正则表达式会做

function someFunction(str,matcher) { 
    var regex = new RegExp('^' + matcher, 'i'); 
    return str.replace(regex, ''); 
} 
+0

请注意,如果字符串未以匹配的字符串开头,则会返回原始数组。 – user1032531

0

你可以这样做

var matcher='Hello'; 
var s1='hello everyone'; 
s=s1.split(" "); 
(s[0].toUpperCase() ===matcher.toUpperCase())?console.log(s[1]):console.log("nothing"); 
+0

虽然我展示了一个''“',我不想依赖它。 – user1032531

+0

好的,在这种情况下,这种解决方案不会工作。 –