const regex = /(?<=at point, )(X=(?:\d|\.)+) +\K(Y=(?:\d|\.)+).*?\K(value \w+)\R +\K(tag \w+)\K/gms;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('(?<=at point, )(X=(?:\\d|\\.)+) +\\K(Y=(?:\\d|\\.)+).*?\\K(value \\w+)\\R +\\K(tag \\w+)\\K', 'gms')
const str = `[ AutoCAD - Thu Sep 03 15:59:09 2020 ]----------------------------------------
Command: LIST
Select objects: Specify opposite corner: 468 found
Select objects:
BLOCK REFERENCE Layer: "layer1"
Space: Model space
Handle = 12345
Block Name: "Block"
at point, X=1378.4556 Y=1314.2124 Z= 0.0000
X scale factor: 16.5000
Y scale factor: 16.5000
rotation angle: 160.67
Z scale factor: 266.0000
Scale uniformly: No
Allow exploding: Yes
ATTRIBUTE Layer: "layer1"
Space: Model space
Handle = 12345
Style = "STANDARD"
Annotative: No
Font file = default.shx
substituted by default.shx
start point, X=1365.1222 Y=1319.6510 Z= 0.0000
height 3.0000
value 2999
tag THINGY
rotation angle 340.67
width scale factor 1.0000
obliquing angle 0.00
flags normal
generation normal
BLOCK REFERENCE Layer: "layer1"
Space: Model space
Handle = 12345
Block Name: "Block"
at point, X=1378.4556 Y=1314.2124 Z= 0.0000
X scale factor: 16.5000
Y scale factor: 16.5000
rotation angle: 160.67
Z scale factor: 266.0000
Scale uniformly: No
Allow exploding: Yes
ATTRIBUTE Layer: "layer1"
Space: Model space
Handle = 12345
Style = "STANDARD"
Annotative: No
Font file = default.shx
substituted by default.shx
start point, X=1365.1222 Y=1319.6510 Z= 0.0000
height 3.0000
value 2999
tag THINGY
rotation angle 340.67
width scale factor 1.0000
obliquing angle 0.00
flags normal
generation normal
BLOCK REFERENCE Layer: "layer1"
Space: Model space
Handle = 12345
Block Name: "Block"
at point, X=1378.4556 Y=1314.2124 Z= 0.0000
X scale factor: 16.5000
Y scale factor: 16.5000
rotation angle: 160.67
Z scale factor: 266.0000
Scale uniformly: No
Allow exploding: Yes
ATTRIBUTE Layer: "layer1"
Space: Model space
Handle = 12345
Style = "STANDARD"
Annotative: No
Font file = default.shx
substituted by default.shx
start point, X=1365.1222 Y=1319.6510 Z= 0.0000
height 3.0000
value 2999
tag THINGY
rotation angle 340.67
width scale factor 1.0000
obliquing angle 0.00
flags normal
generation normal
BLOCK REFERENCE Layer: "layer1"
Space: Model space
Handle = 12345
Block Name: "Block"
at point, X=1378.4556 Y=1314.2124 Z= 0.0000
X scale factor: 16.5000
Y scale factor: 16.5000
rotation angle: 160.67
Z scale factor: 266.0000
Scale uniformly: No
Allow exploding: Yes
ATTRIBUTE Layer: "layer1"
Space: Model space
Handle = 12345
Style = "STANDARD"
Annotative: No
Font file = default.shx
substituted by default.shx
start point, X=1365.1222 Y=1319.6510 Z= 0.0000
height 3.0000
value 2999
tag THINGY
rotation angle 340.67
width scale factor 1.0000
obliquing angle 0.00
flags normal
generation normal
BLOCK REFERENCE Layer: "layer1"
Space: Model space
Handle = 12345
Block Name: "Block"
at point, X=1378.4556 Y=1314.2124 Z= 0.0000
X scale factor: 16.5000
Y scale factor: 16.5000
rotation angle: 160.67
Z scale factor: 266.0000
Scale uniformly: No
Allow exploding: Yes
ATTRIBUTE Layer: "layer1"
Space: Model space
Handle = 12345
Style = "STANDARD"
Annotative: No
Font file = default.shx
substituted by default.shx
start point, X=1365.1222 Y=1319.6510 Z= 0.0000
height 3.0000
value 2999
tag THINGY
rotation angle 340.67
width scale factor 1.0000
obliquing angle 0.00
flags normal
generation normal
BLOCK REFERENCE Layer: "layer1"
Space: Model space
Handle = 12345
Block Name: "Block"
at point, X=1378.4556 Y=1314.2124 Z= 0.0000
X scale factor: 16.5000
Y scale factor: 16.5000
rotation angle: 160.67
Z scale factor: 266.0000
Scale uniformly: No
Allow exploding: Yes
ATTRIBUTE Layer: "layer1"
Space: Model space
Handle = 12345
Style = "STANDARD"
Annotative: No
Font file = default.shx
substituted by default.shx
start point, X=1365.1222 Y=1319.6510 Z= 0.0000
height 3.0000
value 2999
tag THINGY
rotation angle 340.67
width scale factor 1.0000
obliquing angle 0.00
flags normal
generation normal`;
// Reset `lastIndex` if this regex is defined globally
// regex.lastIndex = 0;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for JavaScript, please visit: https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions