在 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+次

Regex demo

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));