我有一个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]:"";
答案 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"