我正在将一些我必须的php代码移植到nodejs。
我遇到的问题与这个 PCRE 正则表达式有关:
/\/?_?[0-9]*_?([^\/\._]*)[_#*\-*\.?\p{L}\p{M}*]*$/u
(此正则表达式匹配, first
in或)_4_first_ääää
_first_äääää
first_äääää
我在这种情况下使用 XRegExp,但没有运气:
// lib/parser.js
var XRegExp = require('xregexp').XRegExp;
module.exports = {
getName : function(string){
var name = XRegExp('\/?_?[0-9]*_?([^\/\._]*)[_#*\-*\.?\p{L}\p{M}*]*$');
var matches = XRegExp.exec(string, name);
if(matches && matches.length > 0){
return matches[1];
}
else{
return '';
}
}
};
以及随之而来的测试(摩卡咖啡):
// test/test.js
var assert = require("assert");
var parser = require('../lib/parser.js');
describe('parser', function(){
describe('#getName()', function(){
it('should return the name contained in the string', function(){
assert.equal('test', parser.getName('3_test'));
assert.equal('test', parser.getName('test'));
assert.equal('test', parser.getName('_3_test'));
assert.equal('test', parser.getName('_3_test_ääää'));
assert.equal('test', parser.getName('_3_test_boom'));
})
})
})
和测试结果:
0 passing (5ms)
1 failing
1) parser #getName() should return the name contained in the string:
AssertionError: "test" == "ääää"
+ expected - actual
+ääää
-test
此代码匹配ääää
.
注释行被捕获first
,所以我想我错过了 unicodes 字符类。
我的问题是:我怎样才能让我原来的 php 正则表达式在 javascript 中工作?
或许有解决办法?