在Node.js中实现更好的正则表达式的方法

Way to implement better regex in Node.js

本文关键字:正则表达式 方法 更好 实现 Node js      更新时间:2023-09-26

我正在使用Node.js的一个项目,我发现Javascript的正则表达式语法非常有限。尤其是没有后视人的感觉简直要了我的命。我试图使用regex将字符串解析成句子,但是我想检查常见的缩写,如Mr.和Mrs.,这样我就不会把句子弄乱。他们的Node.js库是否添加了正则表达式特性,如果没有,一个好的行动方案是什么?

这是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。我个人可以推荐热可可(https://github.com/olleicua/hot-cocoa),因为我自己做的,它非常适合我的目的。

最后,如果你的目标只是匹配任何一个或两个单词,如果第一个是"Mr"或"Mrs",那么像这样的东西可能会起作用:

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' ]