在IE和Firefox中都能工作的最干净的方法是什么?
我的字符串看起来像这个sometext-20202
现在sometext和破折号后面的整数可以有不同的长度。
我应该使用子字符串和索引还是有其他方法?
在IE和Firefox中都能工作的最干净的方法是什么?
我的字符串看起来像这个sometext-20202
现在sometext和破折号后面的整数可以有不同的长度。
我应该使用子字符串和索引还是有其他方法?
当前回答
var testStr = "sometext-20202"
var splitStr = testStr.substring(testStr.indexOf('-') + 1);
其他回答
我问这个问题是因为我需要OP问的问题,而不是其他答案提供的答案(它们在技术上是正确的,但对我的目的来说太少了)。我已经有了自己的解决方案;也许能帮到别人。
假设你的字符串是'Version 12.34.56'。如果你用'。'来分割,其他答案往往会给你'56',而也许你真正想要的是'.34.56'(即从第一次出现的所有内容而不是最后一次出现的所有内容,但OP的特定情况恰好只有一次出现)。也许你甚至想要“版本12”。
我还编写了这个代码来处理某些失败(比如传入null或空字符串等)。在这些情况下,下面的函数将返回false。
Use
splitAtSearch('Version 12.34.56', '.') // Returns ['Version 12', '.34.56']
函数
/**
* Splits string based on first result in search
* @param {string} string - String to split
* @param {string} search - Characters to split at
* @return {array|false} - Strings, split at search
* False on blank string or invalid type
*/
function splitAtSearch( string, search ) {
let isValid = string !== '' // Disallow Empty
&& typeof string === 'string' // Allow strings
|| typeof string === 'number' // Allow numbers
if (!isValid) { return false } // Failed
else { string += '' } // Ensure string type
// Search
let searchIndex = string.indexOf(search)
let isBlank = (''+search) === ''
let isFound = searchIndex !== -1
let noSplit = searchIndex === 0
let parts = []
// Remains whole
if (!isFound || noSplit || isBlank) {
parts[0] = string
}
// Requires splitting
else {
parts[0] = string.substring(0, searchIndex)
parts[1] = string.substring(searchIndex)
}
return parts
}
例子
splitAtSearch('') // false
splitAtSearch(true) // false
splitAtSearch(false) // false
splitAtSearch(null) // false
splitAtSearch(undefined) // false
splitAtSearch(NaN) // ['NaN']
splitAtSearch('foobar', 'ba') // ['foo', 'bar']
splitAtSearch('foobar', '') // ['foobar']
splitAtSearch('foobar', 'z') // ['foobar']
splitAtSearch('foobar', 'foo') // ['foobar'] not ['', 'foobar']
splitAtSearch('blah bleh bluh', 'bl') // ['blah bleh bluh']
splitAtSearch('blah bleh bluh', 'ble') // ['blah ', 'bleh bluh']
splitAtSearch('$10.99', '.') // ['$10', '.99']
splitAtSearch(3.14159, '.') // ['3', '.14159']
myString.split('-').splice(1).join('-')
var testStr = "sometext-20202"
var splitStr = testStr.substring(testStr.indexOf('-') + 1);
var the_string = "sometext-20202";
var parts = the_string.split('-', 2);
// After calling split(), 'parts' is an array with two elements:
// parts[0] is 'sometext'
// parts[1] is '20202'
var the_text = parts[0];
var the_num = parts[1];
其他人都给出了一些非常合理的答案。我选择了另一个方向。不使用split, substring或indexOf。工作伟大的i.e.和firefox。可能网景也适用。
只有一个循环和两个如果。
function getAfterDash(str) {
var dashed = false;
var result = "";
for (var i = 0, len = str.length; i < len; i++) {
if (dashed) {
result = result + str[i];
}
if (str[i] === '-') {
dashed = true;
}
}
return result;
};
console.log(getAfterDash("adfjkl-o812347"));
我的解决方案是高性能的,可以处理边缘情况。
上述代码的目的是拖延工作,请不要实际使用它。