我将如何String.StartsWith
在 JavaScript 中编写等效于 C# 的代码?
var haystack = 'hello world';
var needle = 'he';
haystack.startsWith(needle) == true
注意:这是一个老问题,正如 ECMAScript 2015 (ES6) 介绍该.startsWith
方法的评论中所指出的。但是,在撰写此更新 (2015) 时,浏览器支持还远未完成。
我将如何String.StartsWith
在 JavaScript 中编写等效于 C# 的代码?
var haystack = 'hello world';
var needle = 'he';
haystack.startsWith(needle) == true
注意:这是一个老问题,正如 ECMAScript 2015 (ES6) 介绍该.startsWith
方法的评论中所指出的。但是,在撰写此更新 (2015) 时,浏览器支持还远未完成。
您可以使用 ECMAScript 6 的String.prototype.startsWith()
方法,但尚未在所有浏览器中支持。您需要使用 shim/polyfill 将其添加到不支持它的浏览器上。创建一个符合规范中所有细节的实现有点复杂。如果您想要一个忠实的垫片,请使用:
String.prototype.startsWith
shim,或String.prototype.startsWith
。一旦你完成了这个方法(或者如果你只支持已经拥有它的浏览器和 JavaScript 引擎),你可以像这样使用它:
console.log("Hello World!".startsWith("He")); // true
var haystack = "Hello world";
var prefix = 'orl';
console.log(haystack.startsWith(prefix)); // false
另一种选择.lastIndexOf
:
haystack.lastIndexOf(needle, 0) === 0
这会向后haystack
查看needle
从 index 0
of开始的情况haystack
。换句话说,它只检查是否haystack
以 开头needle
。
原则上,这应该比其他一些方法具有性能优势:
haystack
.data.substring(0, input.length) === input
没有辅助函数,只需使用正则表达式的.test
方法:
/^He/.test('Hello world')
要使用动态字符串而不是硬编码字符串来执行此操作(假设字符串不包含任何正则表达式控制字符):
new RegExp('^' + needle).test(haystack)
您应该查看JavaScript 中是否有 RegExp.escape 函数?如果字符串中可能出现正则表达式控制字符。
最佳解决方案:
function startsWith(str, word) {
return str.lastIndexOf(word, 0) === 0;
}
如果您也需要,这里是endsWith:
function endsWith(str, word) {
return str.indexOf(word, str.length - word.length) !== -1;
}
对于那些喜欢将其原型化为 String 的人:
String.prototype.startsWith || (String.prototype.startsWith = function(word) {
return this.lastIndexOf(word, 0) === 0;
});
String.prototype.endsWith || (String.prototype.endsWith = function(word) {
return this.indexOf(word, this.length - word.length) !== -1;
});
用法:
"abc".startsWith("ab")
true
"c".ensdWith("c")
true
用方法:
startsWith("aaa", "a")
true
startsWith("aaa", "ab")
false
startsWith("abc", "abc")
true
startsWith("abc", "c")
false
startsWith("abc", "a")
true
startsWith("abc", "ba")
false
startsWith("abc", "ab")
true