Мне нужно использовать регулярное выражение для выбора выражений, которые могут принимать следующие формы:
Name 23:12
Или же
2 Name 122:181
Это всегда один и тот же формат:
number
, space
, string
, другое space
, затем number
, символ colon
и последнее number
.До сих пор я использовал следующее:
/(?: |:)+/
Но, конечно, это не работает для второго сценария.
Код регулярного выражения используется в бите JavaScript в Drafts for iOS для управления текстом:
var StringSparsed = String.split(/(?: |:)+/);
Затем в массиве StringSparsed
полученном из функции split
, я хочу только три элемента:
string
либо первая single digit
+ string
)number
перед символом двоеточияnumber
Я не мог понять это самостоятельно. Любая идея?
ура
Поскольку все строки имеют одинаковый формат, хорошим способом их разделения и извлечения может быть следующее:
var regex = /(\d+\s)?(\w+)\s(\d+):(\d+)/;
var matches = "1 Name 23:32".match(regex);
console.log(matches);
Объединив его таким образом, вы получите массив. В индексе [0] вы найдете весь матч. В индексе [1] вы найдете номер (если строка начинается с одного) или неопределенный (просто противоположный случай). Другой индекс от [2] до [4] обязательно будет содержать строку "Имя", цифры перед двоеточие и цифры после толстой кишки, всегда в этом порядке. Я бы сохранил его более точно, когда я могу использовать регулярное выражение, чтобы избежать несоответствий.
Надеюсь это поможет!
Пытаться
/(?:[^\d] |:)/
Это предполагает, что строка не заканчивается цифрой.
Я удалил +
в конце, потому что он появляется только в одном месте или один двоеточие будет отображаться в любой позиции, а не "один или несколько", как указано символом +
.
Но ИМО было бы проще использовать регулярное выражение для получения совпадений вместо использования split()
.
Используйте ниже регулярное выражение для покрытия обоих сценариев:
^[0-9]?\s?[a-zA-Z]*\s[0-9]*:[0-9]*$
StringSparsed.split(^[0-9]?\s?[a-zA-Z]*\s[0-9]*:[0-9]*$);
, Я думаю, это не проблема из вашего кода.
Вы можете подобрать нужные детали и вернуть остальную часть соответствующих деталей.
var getParts = s => s.match(/^(.*) (\d+):(\d+)$/).slice(1);
console.log(getParts('Name 23:12'));
console.log(getParts('2 Name 122:181'));
.as-console-wrapper { max-height: 100% !important; top: 0; }
Я не профессионал, но я понял, используя /(? :: |:) +/вы пропускаете все пробелы и переходите к предполагаемому результату