正则表达式

2022-04-21  本文已影响0人  Iam品种

待匹配字符串:

[房产.建筑面积]+([订单.订单条目数]+[订单.订单总金额])+(([订单.订单条目数]-[订单.订单总金额])/([订单.订单条目数]/[订单.订单总金额]))

一、指定符号包裹的正则表达式

以小括号包裹为例:

1、匹配结果包含小括号,不支持嵌套:
/\((.+?)\)/g
匹配结果:

([订单.订单条目数]+[订单.订单总金额])
(([订单.订单条目数]-[订单.订单总金额])
([订单.订单条目数]/[订单.订单总金额])

2、匹配结果包含小括号,嵌套时只匹配最内层的小括号:
/\(([^\(]+?)\)/g
匹配结果:

([订单.订单条目数]+[订单.订单总金额])
([订单.订单条目数]-[订单.订单总金额])
([订单.订单条目数]/[订单.订单总金额])

3、匹配结果不包含小括号:
/(?<=\()([^\(]+?)(?=\))/g
匹配结果:

[订单.订单条目数]+[订单.订单总金额]
[订单.订单条目数]-[订单.订单总金额]
[订单.订单条目数]/[订单.订单总金额]

4、通用正则表达式:
// 匹配结果包含小括号,不支持嵌套
new RegExp(beginStr +'(.+?)'+endStr, gim);
// 匹配结果包含小括号,嵌套时只匹配最内层的小括号
new RegExp(beginStr +'([^'+beginStr+']+?)'+endStr, gim);
// 匹配结果不包含小括号
new RegExp('(?<='+beginStr+')([^'+beginStr+']+?)(?='+endStr+')', gim);
注:使用时,beginStr和endStr请自行转义,转义时需用'\\'(双斜杠)
function a(beginStr, endStr, gim) {
    console.log(beginStr +'(.+?)'+endStr);
    return new RegExp(beginStr +'(.+?)'+endStr, gim||'');
}
function b(beginStr, endStr, gim) {
    console.log(beginStr +'([^'+beginStr+']+?)'+endStr);
    return new RegExp(beginStr +'([^'+beginStr+']+?)'+endStr, gim||'');
}
function c(beginStr, endStr, gim) {
    console.log('(?<='+beginStr+')([^'+beginStr+']+?)(?='+endStr+')');
    return new RegExp('(?<='+beginStr+')([^'+beginStr+']+?)(?='+endStr+')', gim||'');
}
let text = '[房产.建筑面积]+([订单.订单条目数]+[订单.订单总金额])+(([订单.订单条目数]-[订单.订单总金额])/([订单.订单条目数]/[订单.订单总金额]))';

text.match(a('\(', '\)', 'g'));
 // => ((.+?))
// => ['[', '房', '产', '.', '建', '筑', '面', '积', ']', '+', '(', '[', '订', '单', '.', '订', '单', '条', '目', '数', ']', '+', '[', '订', '单', '.', '订', '单', '总', '金', '额', ']', ')', '+', '(', '(', '[', '订', '单', '.', '订', '单', '条', '目', '数', ']', '-', '[', '订', '单', '.', '订', '单', '总', '金', '额', ']', ')', '/', '(', '[', '订', '单', '.', '订', '单', '条', '目', '数', ']', '/', '[', '订', '单', '.', '订', '单', '总', '金', '额', ']', ')', ')']

text.match(a('\\(', '\\)', 'g'));
// => \((.+?)\)
// => ['([订单.订单条目数]+[订单.订单总金额])', '(([订单.订单条目数]-[订单.订单总金额])', '([订单.订单条目数]/[订单.订单总金额])']

text.match(b('\\(', '\\)', 'g'));
// => \(([^\(]+?)\)
// => ['([订单.订单条目数]+[订单.订单总金额])', '([订单.订单条目数]-[订单.订单总金额])', '([订单.订单条目数]/[订单.订单总金额])']

text.match(c('\\(', '\\)', 'g'));
// => (?<=\()([^\(]+?)(?=\))
// => ['[订单.订单条目数]+[订单.订单总金额]', '[订单.订单条目数]-[订单.订单总金额]', '[订单.订单条目数]/[订单.订单总金额]']
上一篇 下一篇

猜你喜欢

热点阅读