2010-09-12 3 views
5

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

слово граница («\ Ь») является точкой между двумя символами, что имеет «\ ш» на одной стороне его и «\ W» на вкладке другой (в любом порядке), , считая мнимые символы с началом и концом строки, как , соответствующей «\ W». AS3 RegExp to match words with boundry type characters in them

И так

\ ш соответствует любому алфавитно-цифровой символ (символы слов), включая подчеркивание (сокращенно [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]:""; 

ответ

-3

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

Он говорит:

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

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

Это ничего не меняет ... – Shawn

+0

Да, атрибут типа даже не в HTML5, как это ISN 't поддерживается браузерами, это ошибка, которую люди произвели при интерпретации спецификации. Метатег charset работает, но кодировка в ссылках не является реальной вещью. –

+0

@Rich Bradshaw: У меня есть в моей голове. Это то, что вы имели ввиду? – Shawn

4

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

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

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

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

"\\b[a-z]{2}\\b" 
+0

@Alan Moore: В чем разница между использованием литерала и конструктора? Разница, которую я нашел, заключается в том, что если я использую конструктор, я могу добавить совпадения предыдущих регулярных выражений к моему регулярному выражению ... например: var re_address = new RegExp (match_buildingNumber [0] + match_street [0] + match_city [0] + "?", "mi"); Такого рода вещи, которые, к моему knoledge, невозможны с регулярным литералом ... – Shawn

+0

Хорошо, если у вас есть веская причина для использования конструктора, обязательно используйте его. Я просто хотел убедиться, что вы знаете вариант с регулярным выражением. –

+0

@ Алан Мур: хорошо спасибо! Но мне все еще немного любопытно. В чем разница между этими двумя? Почему следует предпочесть использовать литерал, когда это возможно? Кроме того, я загрузил XRegExp и плагин unicode, но я до сих пор не вижу, как использовать его для чего я хочу. Думаю, там где-то там будет Lm (измененная буква)? – Shawn