繁体   English   中英

获取 JavaScript 字符串中破折号后的所有内容

[英]Get everything after the dash in a string in JavaScript

在 IE 和 Firefox 中都可以使用的最干净的方法是什么?

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

现在短划线后面的sometext和整数可以是不同的长度。

我应该只使用substring和索引还是有其他方法?

我将如何做到这一点:

// function you can use:
function getSecondPart(str) {
    return str.split('-')[1];
}
// use the function:
alert(getSecondPart("sometext-20202"));

我更喜欢的解决方案是:

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

你的结果在哪里slug

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];

AFAIK,Mozilla 和 IE 都支持substring()indexOf() 但是,请注意,某些浏览器(尤其是 Netscape/Opera)的早期版本可能不支持 substr()。

您的帖子表明您已经知道如何使用substring()indexOf()来做到这一点,所以我不会发布代码示例。

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

使用内置的 javascript replace()函数并使用正则表达式 ( /(.*)-/ ),您可以用空字符串 ("") 替换破折号字符之前的子字符串:

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

我来到这个问题是因为我需要 OP 提出的问题,但比提供的其他答案更多(它们在技术上是正确的,但对我的目的来说太少了)。 我已经制定了自己的解决方案; 也许它会帮助别人。

假设您的字符串是'Version 12.34.56' 如果您使用'.' 要拆分,其他答案往往会给您'56' ,而您实际上想要的是'.34.56' (即从第一次出现而不是最后一次出现的所有内容,但 OP 的具体情况恰好只有一次出现)。 也许您甚至可能想要'Version 12'

我还编写了它来处理某些失败(例如null被传递或空字符串等)。 在这些情况下,以下函数将返回false

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']

使用以下形式的正则表达式:\\w-\\d+,其中 \\w 代表一个单词,\\d 代表一个数字。 它们不会开箱即用,所以请随意玩耍。 试试这个

对于那些试图在第一次出现后获得一切的人:

"Nic K Cage""K Cage"

您可以使用 slice 从某个字符中获取所有内容。 在这种情况下,从第一个空间:

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

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

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

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

您可以使用split方法。 如果您应该从特定模式中获取字符串,您可以使用split和 req。 经验:

 var string = "sometext-20202"; console.log(string.split(/-(.*)/)[1])

其他人都发布了一些完全合理的答案。 我采取了不同的方向。 不使用 split、substring 或 indexOf。 在 ie 和 firefox 上效果很好。 可能也适用于 Netscape。

只是一个循环和两个如果。

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

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


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

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

  //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];
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM