Получить все после тире в строке в JavaScript

150

Какой самый чистый способ сделать это будет работать как в IE, так и в Firefox.

Моя строка выглядит так: sometext-20202

Теперь «sometext» и целое число после тире могут иметь различную длину.

Должен ли я просто использовать подстроку и индекс или есть другие способы?

mrblah
источник

Ответы:

280

Как бы я это сделал:

// function you can use:
function getSecondPart(str) {
    return str.split('-')[1];
}
// use the function:
alert(getSecondPart("sometext-20202"));
artlung
источник
62
Не стоит ли упомянуть, что эта функция не будет работать, если строка sometext-20202-303?
Истак Ахмед
17
@IstiaqueAhmed было бы, если бы вопрос не был конкретно об очень специфическом формате: «Моя строка выглядит следующим образом: sometext-20202»
artlung
7
Был вопрос, get everything after the dash in a string in javascriptкоторый в этом случае потерпит неудачу.
Артем Калинчук
108

Решение, которое я предпочитаю, будет:

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

Где slugбудет ваш результат

Райан
источник
1
Это решение является лучшим, если вы работаете с несколькими разделителями.
Итан Кили
26
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];
Шон Брайт
источник
24
var testStr = "sometext-20202"
var splitStr = testStr.substring(testStr.indexOf('-') + 1);
Канке
источник
6

AFAIK, оба substring()и indexOf()поддерживаются как Mozilla, так и IE. Однако обратите внимание, что substr () может не поддерживаться в более ранних версиях некоторых браузеров (особенно Netscape / Opera).

Ваше сообщение указывает, что вы уже знаете, как это сделать, используя, substring()и indexOf()поэтому я не публикую пример кода.

Cerebrus
источник
Это на самом деле лучшее решение, чем разделение, в зависимости от вашего приложения, потому что, если у вас есть более одного - вы можете получить нежелательные последствия.
Trevorgrayson
20
string.substring (string.indexOf ('-') + 1)
trevorgrayson
indexOf не существует в IE8 и ниже, хотя существуют многозаполнения.
Эрик Хонн
3

Вы можете сделать это с помощью встроенной RegExp (pattern [, flags]) фабричной нотации в js следующим образом:

RegExp(/-(.*)/).exec("sometext-20202")[1]

В приведенном выше коде функция exec вернет массив с двумя элементами (["-20202", "20202"]), один с дефисом (-20202) и один без дефиса (20202), вы должны выбрать второй элемент (индекс 1)

Ekrami
источник
2
myString.split('-').splice(1).join('-')
kcsoft
источник
Это может быть также:myString.split('-').splice(-1).join('-')
Arkadiusz Wieczorek
0

Используйте регулярное выражение в форме: \ w- \ d +, где a \ w представляет слово, а \ d представляет цифру. Они не будут работать из коробки, так что поиграйте. Попробуй это .

dirkgently
источник