Ищу подстроку альтернативного JavaScript - PullRequest
0 голосов
/ 21 февраля 2019

В основном моя проблема в том, что я использую метод подстроки в версии переменной для результата, который затем используется внутри URL с помощью ng-href:

substring(0, 3)
version 9.1.0 = 9.1 (good)
version 9.2.0 = 9.2 (good)
version 9.3.0 = 9.3 (good)
..
version 9.10.0 = 9.1 (breaks here)
version 10.1.0 = 10. (breaks here)

Как вы можете видеть, в конечном итоге метод подстроки останавливаетсяработает, как я могу это исправить ??

Ответы [ 3 ]

0 голосов
/ 21 февраля 2019

/^\d+\.\d+/ будет соответствовать первым 2 цифрам с точкой между ними.

regex не придется обрабатывать весь ввод, как это делают подходы split.

Он также будет ловить последовательно ., как 30..40.И пробелы.

Он даже будет захватывать буквенные части, такие как 10.B

Это также будет расширяться, если вы хотите начать разрешать такие сегменты, как -alpha, -beta и т. Д.

const rx = /^\d+\.\d+/

const inputs = ['9.1.0', '9.2.0', '9.3.0', '9.10.0', 
'10.1.0', , '22.121.130', '10.A', '10..20', '10. 11', '10 .11'];

inputs.forEach(input => {
  const m = rx.exec(input)
  console.log(input, m ? m[0] : 'not found')
})
0 голосов
/ 21 февраля 2019

Вы можете получить подстроку другим способом, удалив два последних символа, которые будут точкой и числовым символом:

function version(val){
  console.log(val.substring(0,val.length-2))
} 
version('9.1.0');
version('9.2.0');
version('9.3.0');
version('9.10.0');
version('10.1.0');

Но что, если в конце два цифровых символа и точка?Вот это решение:

function version(val){
  var tempVersion = val.split('.');
  tempVersion.pop();
  console.log(tempVersion.join('.'))
} 
version('9.1.0');
version('9.2.0');
version('9.3.1020');
version('9.10.0');
version('10.1.0123');
0 голосов
/ 21 февраля 2019

Используйте split и join на точке, а во время манипулирования массивом используйте slice, чтобы удалить последний элемент:

const inputs = ['9.1.0', '9.2.0', '9.3.0', '9.10.0', '10.1.0', '22.121.130'];

inputs.forEach(input => {
  const result = input.split('.').slice(0, -1).join('.');
  console.log(input, '=>', result);
})

Достаточно просто, и оно будет работать независимо от вашего номера версии:)

Надеемся, что вам помогут!

...