我正在将Node.js用于项目,而且我发现Javascript的正则表达式语法非常有限。特别是缺乏外观是杀了我。我正在尝试使用正则表达式将字符串解析为句子,但我想检查常见的缩写,例如先生和太太。这样我就不会破坏句子。他们是一个添加正则表达式功能的Node.js库,如果不是,那么一个好的行动方案是什么?
答案 0 :(得分:2)
这是javascript正则表达式的难度,
避免您遇到特定问题的方法:
/((?:Mrs?\.)|[^\.]+)+/ # match all that is not a dot or Mr. or Mrs.
有关更多技巧,您可以查看此网站:http://blog.stevenlevithan.com/archives/javascript-regex-lookbehind
答案 1 :(得分:1)
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。我个人推荐热可可(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' ]