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

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

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

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


当前回答

使用内置的javascript replace()函数和使用regex(/(.*)-/),你可以用空字符串("")替换破折号之前的子字符串:

"sometext-20202".replace(/(.*)-/,""); // result --> "20202"

其他回答

var testStr = "sometext-20202"
var splitStr = testStr.substring(testStr.indexOf('-') + 1);

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

比如"尼克·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

使用任何分隔符并获得第一部分或第二部分

  //To divide string using deimeter - here @
  //str: full string that is to be splitted
  //delimeter: like '-'
  //part number: 0 - for string befor delimiter , 1 - string after delimiter
  getPartString(str, delimter, partNumber) {
    return str.split(delimter)[partNumber];
  }

我更喜欢的解决方案是:

const str = 'sometext-20202';
const slug = str.split('-').pop();

你的结果是什么

我问这个问题是因为我需要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']