2010-09-12 75 views
5

我有一个JavaScript正则表达式,基本上可以找到两个字母的单词。问题似乎是它将重音字符解释为字边界。实际上,似乎我该如何制作一个正则表达式来考虑重音字符?

词边界(“\ B”)是一个点的字符 两者之间,有一个“\ W” 在其一侧,并且“\ 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

它说:

添加charset属性 (字符集= “utf-8”),以脚本标记 父页面:

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

这并没有改变什么...... – Shawn 2010-09-12 17:12:47

+0

呀,type属性是不是即使在HTML5因为它不是没有浏览器的支持,这是人们在解释规范时犯的一个错误。 charset元标记起作用,但链接中的charset不是真实的。 – 2010-09-12 18:00:52

+0

@Rich Bradshaw:我的头部有。你是这个意思吗? – Shawn 2010-09-12 18:15:02

4

虽然JavaScript的正则表达式承认在某些情况下,非ASCII字符(如\s),当涉及到\w\b时,它是绝望的不足。如果您希望它们处理ASCII字符以外的任何内容,则必须使用不同的语言,或者使用Unicode plugin安装Steve Levithan的XRegExp库。

顺便说一句,你的正则表达式有错误。你有可选尾随逗号后面\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”);这种事情,对我的知识来说,使用正则表达式文字是不可能的...... – Shawn 2010-09-12 17:22:59

+0

好吧,如果您有充分的理由使用构造函数,请务必使用它。我只是想确保你知道正则表达式选项。 – 2010-09-12 17:41:30

+0

@Alan Moore:好的谢谢!但我仍然有点好奇......两者有什么不同?为什么应该在可能的情况下更喜欢使用文字?另外,我下载了XRegExp和unicode插件,但是我仍然没有看到如何将其用于我想要的。我想在那里会有一个Lm(修改过的字母)? – Shawn 2010-09-12 17:55:14