Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
3.0k views
in Technique[技术] by (71.8m points)

typescript - Group multiline string by regex pattern javascript

I have a multiline string that I want to split and group by a certain regex pattern that appears several times throughout the string

Some filler
at the beginning
of the text

Checking against foo...
Some text here
More text
etc.

Checking against bar...
More text
moremoremore

Using the above, I'd like to group by the value following the term Checking against (so in this example foo and bar, and in those groups would be the text following that line, up until the next occurrence

So the resulting output would be something like the below, allowing access to the values by the grouping name

{
  foo: 'Some text here
More text
etc.'
  bar: 'More text
moremoremore'
}

My initial approach was to split the string on the newlines into an array of elements, I'm then struggling to

  • Find occurrence of "Checking against" and set that as the key
  • Append every line up until the next occurrence as the value

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

maybe you can try this

const str = `Some filler
at the beginning
of the text

Checking against foo...
Some text here
More text
etc.

Checking against bar...
More text
moremoremore`;

let current = null;
const result = {};
str.split("
").forEach(line => {
    const match =line.match(/Checking against (.+?).../);
  if (match) {
    current = match[1];
  } else if (current && line !== "") {
    if (result[current]) {
        result[current] += "
" + line
    } else {
        result[current] = line;
    }
  }
});
console.log(result)

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

2.1m questions

2.1m answers

60 comments

57.0k users

...