我在一个项目中使用 Node.js,我发现 Javascript 的正则表达式语法非常有限。具体来说,缺乏后视正在杀死我。我正在尝试使用正则表达式将字符串解析为句子,但我想检查常见的缩写,例如 Mr. 和 Mrs.,这样我就不会破坏句子。他们是添加正则表达式功能的 Node.js 库吗?如果不是,那么好的做法是什么?
2 回答
这是javascript正则表达式的困难,
避免您的特定问题的方法:
/((?:Mrs?\.)|[^\.]+)+/ # match all that is not a dot or Mr. or Mrs.
更多技巧,你可以看看这个网站:http: //blog.stevenlevithan.com/archives/javascript-regex-lookbehind
Node.js 基于 v8 引擎,它的正则表达式引擎是 v8 的一部分。v8 项目托管在这里:https ://code.google.com/p/v8/ 。正则表达式引擎来自此文件:https ://code.google.com/p/v8/source/browse/trunk/src/ia32/regexp-macro-assembler-ia32.cc?r=4966 。您原则上可以分叉项目并添加所需的功能。我怀疑这将付出更多的努力而不是值得。
正则表达式通常不是为解析而设计的。可以在此处找到许多 Node.js 解析库: https ://npmjs.org/search?q=language+parsing 。我个人可以推荐 hot-cocoa ( https://github.com/olleicua/hot-cocoa ),因为它是我自己制作的,它非常适合我的目的。
最后,如果您的目标只是匹配任何一个单词或两个单词,如果第一个单词是“先生”或“夫人”,那么这样的事情可能会起作用:
var text = 'Mr Potter and Mrs Smith were walking to the house of Mrs Sullivan';
text.match(/(?:Mr |Mrs )?\w+/g);
// returns: [ 'Mr Potter', 'and', 'Mrs Smith', 'were', 'walking', 'to', 'the',
// 'house', 'of', 'Mrs Sullivan' ]