Using regular expressions (in Notepad ), I want to find all JSON sections that contain the string foo
. Note that the JSON just happens to be embedded within a limited set of HTML source code which is loaded into Notepad .
I've written the following regex to accomplish this task:
({[^}]*foo[^}]*})
This works as expected in all the input that is possible.
I want to improve my workflow, so instead of just finding all such JSON sections, I want to write a regex to remove all the HTML & JSON that does not match this expression. The result will be only JSON sections that contain foo
.
I tried using the Notepad regex Replace
functionality with this find
expression:
(?:({[^}]*?foo[^}]*?})|.)
and this replace
expression:
$1\n\n$2\n\n$3\n\n$4\n\n$5\n\n$6\n\n$7\n\n$8\n\n$9\n\n
This successfully works for the last occurrence of foo
within the JSON, but does not find the rest of the occurrences.
How can I improve my code to find all the occurrences?
Here is a simplified minimal example of input and desired output. I hope I haven't simplified it too much for it to be useful:
Simplified input:
<!DOCTYPE html>
<html>
<div dat="{example foo1}"> </div>
<div dat="{example bar}"> </div>
<div dat="{example foo2}"> </div>
</html>
Desired output:
{example foo1}
{example foo2}
CodePudding user response:
The comment section was full tried to suggested a code here,
Let me know if this is a bit close to your intended result,
Find: ^[\S\s] ?({.*?foo\d})|.
Replace all: $1
CodePudding user response:
You can use
{[^}]*foo[^}]*}|((?s:.))
Replace with (?1:$0\n)
. Details:
{[^}]*foo[^}]*}
-{
, zero or more chars other than}
,foo
, zero or more chars other than}
and then a}
|
- or((?s:.))
- Capturing group 1: any one char ((?s:...)
is an inline modifier group where.
matches all chars including line break chars, same as if you enabled.
matches newline option).
The (?1:$0\n)
replacement pattern replaces with an empty string if Group 1 was matched, else the replacement is the match text a newline.
See the demo and search and replace dialog settings: