2016-10-21 2 views
2

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

Например [\u002D\u0020] будет соответствовать все пробелы и дефис.

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

Однако, я хочу Wi-Fi, чтобы не быть матча, так как он имеет письмо характер до и после. (например, \w+\u002D\w+)

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

EDIT: Просто для объяснения того, чего я пытаюсь достичь. Я хочу собрать все знаки препинания и конкретные символы из предложения и игнорировать все слова (например, - + # $% и т. Д.).

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

+2

«Является ли двигатель осведомленным о культурах», к сожалению, это не очень хорошо, если вы хотите, чтобы международные вещи. Существуют библиотеки регулярных выражений, такие как XRegExp, которые работают с ними. – vlaz

+0

Можете ли вы поместить образцы данных о том, каковы ваши ожидаемые действительные совпадения и недействительные соответствия? –

+1

В JS '\ w' не знает Unicode. –

ответ

1

Try соответствие всего дефис слова и матча и захват несловообразующих символов во всех других контекстах, используя 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}+) f ollowed с 1 или более последовательностей - и 1+ букв снова
  • | - или
  • ([^\\p{L}\\p{N}_ ]) - Группа 1, захватив один символ, кроме пространства, _, буквы (\\p{L}) и цифр (\\p{N}).

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

+0

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

+0

Можно ли загружать только аддон категорий, чтобы избежать загрузки всей библиотеки (220kb). Я просто использую raw html без модуля и инструментов для комплектации. –

+0

Я не знаю, можете ли вы частично загрузить его, но теоретически вы можете просто использовать регулярные выражения категории из [исходного кода GitHub] (https://github.com/slevithan/xregexp/blob/master/src/addons/ Юникод-categories.js # L61). –

Смежные вопросы