在 JavaScript 中找到正确的正则表达式
Finding the right Regular Expressions in JavaScript
很难在 JavaScript 中找到正确的正则表达式。
这是测试字符串
[tr1,1,70,18][jl2]39th St [nl1]Adams Blvd [tr71,1,39,18][jl3][=11=].70[nl1][=11=].80[tr1,19,110,8][jl3]HOV2+ W/FLEX [=11=]
我想找到一个与下面所有 3 个字符串匹配的表达式:
[tr1,1,70,18][jl2]39th St [nl1]Adams Blvd
[tr71,1,39,18][jl3][=12=].70[nl1][=12=].80
[tr1,19,110,8][jl3]HOV2+ W/FLEX [=12=]
我设法接近匹配 [tr 部分但还需要其余文本的正则表达式。
\[tr\d+,\d+,\d+,\d+\]
正则表达式测试器 here.
如果除了组的开头之外没有任何内容以 [tr
开头,您可以试试这个正则表达式:
\[tr(?:(?!\[tr).)*
\[tr
从 [tr
开始
(?:(?!\[tr).)*
匹配它后面的每个字符,除非前面有另一个 [tr
const text = '[tr1,1,70,18][jl2]39th St [nl1]Adams Blvd [tr71,1,39,18][jl3][=11=].70[nl1][=11=].80[tr1,19,110,8][jl3]HOV2+ W/FLEX [=11=]';
const regex = /\[tr(?:(?!\[tr).)*/g;
const result = text.match(regex);
console.log(result);
或者你可以尝试这个更安全的选择:
\[tr\d+,\d+,\d+,\d+\](?:(?!\[tr\d+,\d+,\d+,\d+\]).)*
另一种方法是将第一个 [tr
部分与一个或多个逗号分隔的数字匹配,然后在不以 tr
开头的方括号之间重复匹配部分
\[tr\d+(?:,\d+)+](?:\[(?!tr)[^][]+][^][]*)+
模式匹配
\[tr
匹配 [tr
\d+(?:,\d+)+
匹配 1+ 个数字并重复 1+ 次逗号和 1+ 数字
]
匹配一个]
字符
(?:
非捕获组
\[(?!tr)
匹配[
并断言不直接跟在ty后面tr
[^][]+]
匹配从 [
到 ]
[^][]*
匹配除 [
和 ]
之外的任何字符 0+ 次
)+
关闭非捕获组并重复1+次
const s = '[tr1,1,70,18][jl2]39th St [nl1]Adams Blvd [tr71,1,39,18][jl3][=11=].70[nl1][=11=].80[tr1,19,110,8][jl3]HOV2+ W/FLEX [=11=]';
const regex = /\[tr\d+(?:,\d+)+](?:\[(?!tr)[^\][\n]+][^\][\n]*)+/g;
console.log(s.match(regex));
很难在 JavaScript 中找到正确的正则表达式。
这是测试字符串
[tr1,1,70,18][jl2]39th St [nl1]Adams Blvd [tr71,1,39,18][jl3][=11=].70[nl1][=11=].80[tr1,19,110,8][jl3]HOV2+ W/FLEX [=11=]
我想找到一个与下面所有 3 个字符串匹配的表达式:
[tr1,1,70,18][jl2]39th St [nl1]Adams Blvd
[tr71,1,39,18][jl3][=12=].70[nl1][=12=].80
[tr1,19,110,8][jl3]HOV2+ W/FLEX [=12=]
我设法接近匹配 [tr 部分但还需要其余文本的正则表达式。
\[tr\d+,\d+,\d+,\d+\]
正则表达式测试器 here.
如果除了组的开头之外没有任何内容以 [tr
开头,您可以试试这个正则表达式:
\[tr(?:(?!\[tr).)*
\[tr
从[tr
开始
(?:(?!\[tr).)*
匹配它后面的每个字符,除非前面有另一个[tr
const text = '[tr1,1,70,18][jl2]39th St [nl1]Adams Blvd [tr71,1,39,18][jl3][=11=].70[nl1][=11=].80[tr1,19,110,8][jl3]HOV2+ W/FLEX [=11=]';
const regex = /\[tr(?:(?!\[tr).)*/g;
const result = text.match(regex);
console.log(result);
或者你可以尝试这个更安全的选择:
\[tr\d+,\d+,\d+,\d+\](?:(?!\[tr\d+,\d+,\d+,\d+\]).)*
另一种方法是将第一个 [tr
部分与一个或多个逗号分隔的数字匹配,然后在不以 tr
\[tr\d+(?:,\d+)+](?:\[(?!tr)[^][]+][^][]*)+
模式匹配
\[tr
匹配[tr
\d+(?:,\d+)+
匹配 1+ 个数字并重复 1+ 次逗号和 1+ 数字]
匹配一个]
字符(?:
非捕获组\[(?!tr)
匹配[
并断言不直接跟在ty后面tr
[^][]+]
匹配从[
到]
[^][]*
匹配除[
和]
之外的任何字符 0+ 次
)+
关闭非捕获组并重复1+次
const s = '[tr1,1,70,18][jl2]39th St [nl1]Adams Blvd [tr71,1,39,18][jl3][=11=].70[nl1][=11=].80[tr1,19,110,8][jl3]HOV2+ W/FLEX [=11=]';
const regex = /\[tr\d+(?:,\d+)+](?:\[(?!tr)[^\][\n]+][^\][\n]*)+/g;
console.log(s.match(regex));