在IE和Firefox中都能工作的最干净的方法是什么?

我的字符串看起来像这个sometext-20202

现在sometext和破折号后面的整数可以有不同的长度。

我应该使用子字符串和索引还是有其他方法?


当前回答

myString.split('-').splice(1).join('-')

其他回答

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"));

我的解决方案是高性能的,可以处理边缘情况。


上述代码的目的是拖延工作,请不要实际使用它。

使用格式为\w-\d+的正则表达式,其中\w代表单词,\d代表数字。开箱即用是行不通的,所以可以试一试。试试这个。

myString.split('-').splice(1).join('-')

对于那些试图在第一次事件发生后就得到所有东西的人:

比如"尼克·K·凯奇"变成"K·凯奇"

你可以使用切片来获取某个角色的所有内容。在本例中,从第一个空格开始:

const delim = " "
const name = "Nic K Cage"

const result = name.split(delim).slice(1).join(delim) // prints: "K Cage"

或者如果OP的字符串有两个连字符:

const text = "sometext-20202-03"
// Option 1
const opt1 = text.slice(text.indexOf('-')).slice(1) // prints: 20202-03
// Option 2
const opt2 = text.split('-').slice(1).join("-")     // prints: 20202-03