6

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

2 回答 2

5

虽然 JavaScript 正则表达式在某些情况下(例如 )可以识别非 ASCII 字符,但对于和\s来说它是完全不够的。如果您希望它们使用 ASCII 字字符以外的任何字符,您将不得不使用不同的语言,或者使用Unicode 插件安装 Steve Levithan 的XRegExp库。\w\b

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

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

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

"\\b[a-z]{2}\\b"
于 2010-09-12T07:27:22.447 回答
-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"
于 2010-09-12T05:10:14.863 回答