D.Ng
D.Ng

Reputation: 57

Regex to match string after similar words

I am trying to parse the log file below; however I am a bit stuck on figuring out how to match the results after all the "Step=Number".

Step=10 , Step=11 , Step=12 , Step=13 , Step=14 , Step=15 , Step=16 , Step=18 , Step=17 , Step=20 , Step=19 , Step=25 , Step=21 , Step=26 , Step=28 , Step=24 , Step=22 , Step=23 , Step=27 , Step=30 , Step=29 , Step=35 , Step=34 , Step=32 , Step=31 , Step=38 , Step=37 , Step=36 , Step=50 , Step=45 , Step=48 , Step=41 , Step=52 , Step=42 , Step=57 , Step=65 , Step=61 , Step=62 , Step=64 , Step=54 , Step=53 , Step=59 , Step=63 , Step=84 , Step=71 , SelectedAuthenticationIdentityStores=paddedvalue, NetworkDeviceName=exampledevice, NetworkDeviceGroups=Update Source:All Sources:ACS, NetworkDeviceGroups=Device Type:All Device Types:Wireless, NetworkDeviceGroups=Location:All Locations, ServiceSelectionMatchedRule=Rule-1, IdentityPolicyMatchedRule=Default

I was thinking about matching after the combination of: \d\s\,\s

The ideal goal is to match the following:

SelectedAuthenticationIdentityStores=paddedvalue, NetworkDeviceName=exampledevice, NetworkDeviceGroups=Update Source:All Sources:ACS, NetworkDeviceGroups=Device Type:All Device Types:Wireless, NetworkDeviceGroups=Location:All Locations, ServiceSelectionMatchedRule=Rule-1, IdentityPolicyMatchedRule=Default

I tried the following regex: \d\s\\,\s(.*) but that matches everything after the first Step=Number (Step=10)

Upvotes: 3

Views: 88

Answers (2)

blhsing
blhsing

Reputation: 106588

You can use another .* in the beginning of your existing pattern to greedily consume all but the last possible match:

.*\d\s,\s(.*)

Demo: https://regex101.com/r/Oc7jUK/1

Alternatively, you can use a positive lookbehind pattern to ensure that the match is preceded by a \d\s,\s, and a negative lookahead pattern to ensure that there's no more \d\s,\s that follows:

(?<=\d\s,\s)(?!.*\d\s,\s).*

Demo: https://regex101.com/r/Oc7jUK/2

Upvotes: 1

Aziz.G
Aziz.G

Reputation: 3721

why not using a regex that match all after SelectedAuthenticationIdentityStores like SelectedAuthenticationIdentityStores.* or \w{5,}.*

const regex = /SelectedAuthenticationIdentityStores.*/g;
const text = `Step=10 , Step=11 , Step=12 , Step=13 , Step=14 , Step=15 , Step=16 , Step=18 , Step=17 , Step=20 , Step=19 , Step=25 , Step=21 , Step=26 , Step=28 , Step=24 , Step=22 , Step=23 , Step=27 , Step=30 , Step=29 , Step=35 , Step=34 , Step=32 , Step=31 , Step=38 , Step=37 , Step=36 , Step=50 , Step=45 , Step=48 , Step=41 , Step=52 , Step=42 , Step=57 , Step=65 , Step=61 , Step=62 , Step=64 , Step=54 , Step=53 , Step=59 , Step=63 , Step=84 , Step=71 , SelectedAuthenticationIdentityStores=paddedvalue, NetworkDeviceName=exampledevice, NetworkDeviceGroups=Update Source:All Sources:ACS, NetworkDeviceGroups=Device Type:All Device Types:Wireless, NetworkDeviceGroups=Location:All Locations, ServiceSelectionMatchedRule=Rule-1, IdentityPolicyMatchedRule=Default`
console.log(text.match(regex))

Upvotes: 0

Related Questions