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

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

public class MultiDictionary<TKey, TValue> : Dictionary<TKey, List<TValue>>
{
    public void Add(TKey key, TValue value)
    {
        if (TryGetValue(key, out List<TValue> valueList)) {
            valueList.Add(value);
        } else {
            Add(key, new List<TValue> { value });
        }
    }
}

Это создает перегруженную версию метода Add. Исходный позволяет вам вставить список элементов для ключа, если для этой записи еще нет записи. Эта версия позволяет вставить один элемент в любом случае.

96
задан Craig 24 August 2010 в 18:44
поделиться

1 ответ

Вам нужно поместить символы, которые вы хотите разбить, в класс символов, который сообщает обработчику регулярных выражений, что "любой из этих символов является совпадением". Для ваших целей это будет выглядеть так:

date.split(/[.,\/ -]/)

Несмотря на то, что тире имеют особое значение в классах символов в качестве спецификатора диапазона (например, [az] означает то же, что и [abcdefghijklmnopqrstuvwxyz]), если вы поместите его как последнее в классе, оно будет означать буквальное тире, и его не нужно экранировать.

Чтобы объяснить, почему ваш шаблон не работает, /-./ сообщает обработчику регулярных выражений, чтобы он соответствовал буквальному символу дефиса, за которым следует любой символ (точки являются подстановочными знаками в обычные выражения). С «25-02-2010» он будет разделяться каждый раз, когда встречается «-2», потому что тире соответствует, а точка соответствует «2».

152
ответ дан 24 November 2019 в 04:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: