待匹配字符串:
[房产.建筑面积]+([订单.订单条目数]+[订单.订单总金额])+(([订单.订单条目数]-[订单.订单总金额])/([订单.订单条目数]/[订单.订单总金额]))
一、指定符号包裹的正则表达式
以小括号包裹为例:
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'));
// => (?<=\()([^\(]+?)(?=\))
// => ['[订单.订单条目数]+[订单.订单总金额]', '[订单.订单条目数]-[订单.订单总金额]', '[订单.订单条目数]/[订单.订单总金额]']