#javascript #regex #string
#javascript #регулярное выражение #строка
Вопрос:
У меня есть следующее регулярное javascript
выражение для операции разделения, поскольку я не могу выполнить отрицательный анализ, чтобы найти какие-либо разделители ,
в строке, которая не продолжается одним или несколькими управляющими символами
.
[^\],
Регулярное выражение отлично работает для определения того, где находятся запятые, не пройденные
, но также находит символ, который продолжает запятую как совпадение, и, таким образом, неправильно разделяет строку.
Например, если бы у меня была строка
hello,there,are
Результат будет e,
соответствовать моему регулярному выражению, а не только ,
. Чтение массива разделенных строк
[hello,ther] [are]
Почему регулярное выражение, которое я использую, продолжает находить запятую и следующий символ вместо того, чтобы только сопоставлять запятую?
Комментарии:
1. Потому что ваш reges состоит из 2 символов. 1-й символ, который он найдет, — это все, что не является обратной косой чертой, а 2-й символ будет запятой.
2. @anubhava прав, ваше регулярное выражение соответствует чему угодно, кроме « перед запятой.
3. @anubhava спасибо, вот что я подумал. Есть ли что-нибудь в javascript, кроме изменения строки, для достижения моей цели?
4. Вы не можете использовать
split
здесь, потому что вам понадобится lookbehind, который JS regex не поддерживает. Используйте amatch
с соответствующим регулярным выражением.
Ответ №1:
Вы не можете использовать split
здесь, потому что вам понадобится lookbehind, который JS regex не поддерживает. Используйте совпадение с соответствующим регулярным выражением. Как показано ниже:
/(?:[^\,]|\.) /g
Смотрите демонстрацию регулярных выражений.
Шаблон сопоставляет 1 или более
последовательностей () любого символа, отличного от ,
и
( [^\,]
) или ( |
) любого экранированного символа (исключая символы разрыва строки) с \.
Демонстрация JS:
var regex = /(?:[^\,]|\.) /g;
var str = "hello\,there,are";
var res = str.match(regex);
console.log(res);
Комментарии:
1. Подождите… как это принято? Это не сработает, если вы используете
string.split()
2. @musefan
.split()
не работает, но.match()
все равно возвращает массив, как и просил OP.