2010-11-17 3 views
1

У меня есть строка, которая может содержать несколько разных значений, среди которых есть.Удалить все символы после последнего - но только если после - имеет четыре символа

EDITED для ясности: тест вар может равняться FW21002-185 или FW21002-181-0001 или АБВГДЕЖ или 245-453-654 или FW21002-181-00012

Я хотел бы, чтобы удалить все символы после и в том числе последний - только если эта строка содержит четыре символа после последней тире. Таким образом, в приведенных выше примерах строк, только один, который должен быть изменен, является вторым для «FW21002-181». Остальные останутся такими, какие они есть.

Как бы это сделать в JavaScript. Regex в порядке. Благодарю.

+1

JavaScript вы вывесили не имеет смысла и синтаксически недействительными. –

+0

Он не должен был быть «действительным» javascript. Я пытался указать, что переменный тест может содержать любое из значений, приведенных ниже – user357034

ответ

3

Регулярное выражение, чтобы сделать это было бы

var chopped = test.replace(/-[^-]{4,}$/, '-'); 

(если вы хотите, чтобы "-" в конце). (О и это предназначено, чтобы соответствовать 4 или более завершающих символов - если вы хотите именно четыре, просто избавиться от запятой в {4,}.)

+0

спасибо, моя ошибка, я не хочу последнего «-». Поэтому я предполагаю, что его var chopped = test.replace (/ - [^ \ -] {4,} $ /, ''); – user357034

+0

yes - также я исправил эту блуждающую обратную косую черту в [^ -] вещи - вам это не нужно. – Pointy

+0

Работал безупречно без, в {4} и с "" как строка замены, THX !!! – user357034

1

Если вы не хотите использовать регулярное выражение:

function removeLongSuffix(var str) 
{ 
    var tokens = str.split('-'), 
     last = tokens[tokens.length-1]; 
     if (last.length > 3) 
     { 
      return tokens.slice(0,-1).join('-'); 
     } 
     return str; 
} 
2

нет необходимости регулярных выражений:

var str = ..., 
    pos = str.lastIndexOf('-'); 

if (pos > -1 && pos == str.length - 5) 
    str = str.substring(0, pos); 
Смежные вопросы