如何制作一个将重音字符考虑在内的正则表达式?

时间:2010-09-12 04:28:32

标签: javascript regex diacritics word-boundary

我有一个JavaScript正则表达式,基本上可以找到两个字母的单词。问题似乎是它将重音字符解释为单词边界。确实,似乎

  

单词边界(“\ b”)是一个点   两个字符之间有一个“\ w”   在它的一边和一个“\ W”   它的另一面(按任意顺序),   计算假想的人物   字符串的开头和结尾为   匹配“\ W”。   AS3 RegExp to match words with boundry type characters in them

从那以后

  

\ 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 个答案:

答案 0 :(得分:5)

虽然JavaScript正则表达式在某些情况下识别非ASCII字符(例如\s),但在涉及\w\b时却无可救药。如果您希望它们使用ASCII字符以外的任何内容,您必须使用其他语言,或者使用XRegExp安装Steve Levithan的Unicode plugin库。

顺便说一句,你的正则表达式出错了。在可选的尾随逗号后面有\b,但它应该在前面:

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

我也删除了方括号;如果逗号在正则表达式中具有特殊含义,那么你只需要那些,但事实并非如此。但我怀疑你根本不需要匹配逗号; \b应该足以确保你在这个词的末尾。如果您不需要逗号,则不需要捕获组:

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

答案 1 :(得分:-3)

您是否将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"