Регулярное выражение для соответствия набору символов, но отрицающее последовательность

#javascript #regex

#javascript #регулярное выражение

Вопрос:

Я пытаюсь сопоставить последовательность разделителей, но отрицаю всякий раз, когда дефис в качестве символа до и после как таковой:

Например, [u002Du0020] будет соответствовать всем пробелам и дефисам.

У меня есть Wi-Fi

Однако я хочу, чтобы Wi-fi не совпадал, поскольку до и после него есть буквенный символ. (например w u002Dw )

Как мне отменить последовательность при сопоставлении набора символов? Кроме того, ограничено ли w символами латинской буквы? Знает ли движок о культурах, например, арабском и турецком?

РЕДАКТИРОВАТЬ: Просто чтобы подробнее объяснить, чего я пытаюсь достичь. Я хочу собрать все знаки препинания и определенные символы из предложения и игнорировать все слова (например, — # $% и т.д.).

Всякий раз, когда есть слово, написанное через дефис (например, современное) Я хочу игнорировать все слово. «это# % современный дизайн» Я намерен получить следующую коллекцию: «#, %».

Комментарии:

1. Is the engine aware of the cultures к сожалению, нет, что не очень хорошо, когда вам нужны международные материалы. Существуют библиотеки регулярных выражений, такие как XRegExp, которые работают с ними.

2. Можете ли вы поместить примеры данных о том, какие ваши ожидаемые допустимые совпадения и недопустимые совпадения?

3. В JS w не поддерживается Unicode.

4. @FedericoPiazza Я хочу собрать все слова из предложения и игнорировать знаки препинания и определенные символы (например, — # $% и т.д.). Всякий раз, когда есть слово, написанное через дефис (например, современное) Я хочу собрать все слово целиком. «это# % современный дизайн» Я намерен получить следующую коллекцию: «это, это, современный, дизайн»

5. @pelican_george, спасибо.. Я обновил ответ на ваш последний комментарий

Ответ №1:

Попробуйте сопоставить все слова, написанные через дефис, а также сопоставить и захватить символы, не являющиеся словами, во всех других контекстах, используя XRegExp :

 var s = "this is# a %statè-òf-thè-árt or state-of-the-art design";
var rx = XRegExp("\p{L} (?:-\p{L} ) |([^\p{L}\p{N}_ ])","g");
var res = [];
XRegExp.forEach(s, rx, function(match, i) {
    if (match[1]) res.push(match[1]);
});
console.log(res);  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/xregexp/2.0.0/xregexp-all-min.js"></script>  

Шаблон соответствует:

  • \p{L} (?:-\p{L} ) за одной или несколькими буквами ( \p{L} ) следует 1 или более последовательностей из - и снова 1 букв
  • | — или
  • ([^\p{L}\p{N}_ ]) — Группа 1, содержащая один символ, отличный от пробела, _ букв ( \p{L} ) и цифр ( \p{N} ).

В результирующий массив следует помещать только содержимое группы 1.

Комментарии:

1. Возможно, я немного усложнил это: var rx = XRegExp("\p{L}-\p{L}|([^\p{L}\p{N}_ ])","g"); может сработать и для вас.

2. Возможно ли загрузить только дополнение categories, чтобы избежать загрузки всей библиотеки (220 КБ). Я просто использую необработанный html без каких-либо модулей или инструментов связывания.

3. Я не знаю, сможете ли вы загрузить его частично, но теоретически вы можете просто использовать регулярные выражения категории из исходного кода GitHub .