Как я могу сделать регулярное выражение, которое учитывает акцентированные символы? - PullRequest
6 голосов
/ 12 сентября 2010

У меня есть регулярное выражение JavaScript, которое в основном находит двухбуквенные слова. Кажется, проблема в том, что он интерпретирует акцентированные символы как границы слов. Действительно, кажется, что

Граница слова ("\ b") - это точка между двумя символами, которые имеют "\ w" на одной стороне от него и "\ W" на другая сторона этого (в любом порядке), считая воображаемые символы начало и конец строки как соответствует "\ W". AS3 RegExp для сопоставления слов с символами типа границы в них

А с

\ w соответствует любому буквенно-цифровому символ (слово символы), включая подчеркивание (сокращение от [a-zA-Z0-9_]). \ W соответствует любым несловесным символам (сокращение от [^ a-zA-Z0-9_]) http://www.javascriptkit.com/javatutors/redev2.shtml

явно акцентированные символы не учитываются. Это становится проблемой со словами типа Montréal. Если é считается границей слова, то al является двухбуквенным словом. Я попытался сделать свое собственное определение границы слова, которая бы учитывала акцентированные символы, но видя, что граница слова - это даже не символы, я точно не знаю, как ее найти ..

Любая помощь?

Вот соответствующий код JavaScript, который ищет userInput и находит двухбуквенные слова, используя регулярное выражение re_state:

var re_state = new RegExp("\\b([a-z]{2})[,]?\\b", "mi");
var match_state = re_state.exec(userInput);
document.getElementById("state").value = (match_state)?match_state[1]:"";

Ответы [ 2 ]

5 голосов
/ 12 сентября 2010

Хотя регулярные выражения JavaScript распознают символы не ASCII в некоторых случаях (например, \s), это безнадежно неадекватно, когда дело доходит до \w и \b.Если вы хотите, чтобы они работали с чем-либо, кроме символов слова ASCII, вам придется использовать другой язык или установить библиотеку Стива Левитана XRegExp с плагином Unicode .

Кстати, в вашем регулярном выражении есть ошибка.У вас есть \b после дополнительной запятой, но она должна быть впереди:

"\\b([a-z]{2})\\b,?"

Я также снял квадратные скобки;они понадобятся вам только в том случае, если в регулярных выражениях запятая будет иметь особое значение, а это не так.Но я подозреваю, что вам вообще не нужно ставить запятую;\b должно быть достаточно, чтобы убедиться, что вы в конце слова.И если вам не нужна запятая, вам также не нужна группа захвата:

"\\b[a-z]{2}\\b"
0 голосов
/ 12 сентября 2010

Вы установили JavaScript для использования не-ASCII?Вот страница, которая предлагает настроить JavaScript для использования UTF-8: http://blogs.oracle.com/shankar/entry/how_to_handle_utf_8

Он говорит:

добавить атрибут charset (charset = "utf-8")Теги сценария на родительской странице:

script type="text/javascript" src="[path]/myscript.js"  charset="utf-8"
...