正则表达式

待匹配字符串:

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

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

以小括号包裹为例:

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'));
// => (?<=\()([^\(]+?)(?=\))
// => ['[订单.订单条目数]+[订单.订单总金额]', '[订单.订单条目数]-[订单.订单总金额]', '[订单.订单条目数]/[订单.订单总金额]']
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 正则表达式简介 Perl最重要的一大特色就是对正则表达式的强力支持,这些支持提供了强大且灵活的字符串处理能力。正则...
    樱雨楼阅读 1,034评论 0 1
  • 参考文章 正则表达式30分钟入门教程 学习之前 学习之前,先安装一个Mac上用的软件,来测试你的正则表达式是否正确...
    刘大帅阅读 3,821评论 2 36
  • 元字符 \b 代表着单词的开头或结尾,也就是单词的分界处。虽然通常英文的单词是有空格,标点符号挥着换行来分割的,但...
    onzing阅读 639评论 0 0
  • 1.12个常用的js正则表达式 (1)在input框中只能输入金额,其实就是只能输入最多有两位小数的数字** (2...
    Bai1997_阅读 587评论 0 0
  • 以下出自图灵丛书精通正则表达式一书,实验遇到的问题及解决方法,记载在此 Java正则的使用姿势 Regular E...
    语落心生阅读 948评论 0 0