#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 .