具有动态变量的Regex
Regex with dynamically variable
我有一个文件,里面有巨大的字符串,我需要使用模式"NºARQUIVO:"将它们分离出来。但为此,首先我需要识别子字符串"NºARQUIVO:"的第一个出现,然后创建真正的正则表达式,如下所示:
首先,我识别第一个"NºARQUIVO:"的出现http://www.regexr.com/3c652
因此:
let string = 'THE HUGE STRING'; // I'm not going to paste here because the string is too big.
let reg = /.*?MINISTÉRIO DO TRABALHO E EMPREGO.*?Nº ARQUIVO:'s(['w-]+)/;
let match = reg.exec(string)[0];
输出:
PA8Nm01j0oI0000-9
现在,我需要使用第二个正则表达式来分隔要提取的字符串的开始位置和结束位置。
let reg2 = new RegExp('(.*?MINISTÉRIO DO TRABALHO E EMPREGO.*'+ match + '.*?Z6:''s[''w]+''b)')
let match2 = reg.exec(string)[0];
输出:
All the text from the MINISTÉRIO DO TRABALHO E EMPREGO **** the first Z6: 0 after the last PA8Nm01j0oI0000-9
我想知道是否可以用一个正则表达式中的一个步骤来替换上面的两个步骤。
您可以使用
.*?MINISTÉRIO DO TRABALHO E EMPREGO.*?Nº ARQUIVO:'s(['w-]+).*?Z6:'s'w+'b
|-------------------------- 1 ----------------------------|--- 2 ------|
参见regex演示
但是,这个正则表达式效率太低。使用另一个相同的,但效率高得多的:
MINISTÉRIO DO TRABALHO E EMPREGO(?:[^N]*(?:N(?!º ARQUIVO:)[^N]*)*)Nº ARQUIVO:'s(['w-]+)(?:[^Z]*(?:Z(?!6:'s'w+)[^Z]*)*)Z6:'s'w+'b
查看另一个regex演示
不同之处在于,延迟匹配被"展开"的构造所取代(请参阅"展开循环"文章)
在JS中,您可以使用
var re = /MINISTÉRIO DO TRABALHO E EMPREGO(?:[^N]*(?:N(?!º ARQUIVO:)[^N]*)*)Nº ARQUIVO:'s(['w-]+)(?:[^Z]*(?:Z(?!6:'s'w+)[^Z]*)*)Z6:'s'w+'b/g;
var str = "<<HUGE_STRING>>";
var m;
while ((m = re.exec(str)) !== null) {
// m[0] = whole match
// m[1] = 'PA8Nm01j0oI0000-9'-like submatches
}
相关文章:
- 在Javascript中添加多个变量以使用RegEx函数
- 从javascript regex.exec分配多个变量
- 使用javascript中的捕获组从变量创建regex
- 在RegEx(JavaScript)中正确转义变量
- 用于提取基于点概念的变量的动态Regex
- 使用带有.match Regex表达式的变量的JavaScript
- Backbone.js路由中的变量:需要regex
- 具有动态变量的Regex
- Regex JavaScript字符串并将结果存储到变量中
- Regex将一些变量转换为js
- Javascript:测试regex并赋值给变量,如果它在一行中匹配
- 如何将RegEx反向引用作为变量传递
- 如何在JQuery中使用regex (field $)向字符串变量添加整数
- Regex只接受变量名
- RegEx:从URL提取GET变量
- 将regex $1和$2保存为javascript变量
- 用字符串javascript regex匹配存储在变量或数组中的值
- 使用regex解释不同类型的变量,并使用jquery进行查找和替换
- PHP Regex从JSON变量中获取内容
- 使用包含Regex的变量