使用正则表达式查找单词之间的特定文本
Find specific text between words using Regex
我正在尝试替换一些字符串,但我的条件是该字符串必须在 "tag" 内。
我如何使用正则表达式来做到这一点?
例如:
Text multiline, bla bla bla **FOO** text text text
*START_TAG* text text text text **FOO** a lot of texts
**FOO** more text
*END_TAG*
我想替换 FOO 介于 START_TAG 和 [=37= 之间的文本]
我试过这样做:
(?<=word1)(.*?)(?=word2)
或
(?<=word1)FOO(?=word2)
但在第一种情况下,我得到了标签中的所有内容,而在第二种情况下,什么也找不到。
我搜索了很多,但人们习惯于搜索括号内的字符串或单词之间的所有文本等
我正在使用 Java 来执行此操作,但也可以在 javascript.
中
在 Java 中,您可以使用 one-regex 解决方案,例如
String result = s.replaceAll("((?:\G(?!\A)|START_TAG)(?:(?!START_TAG|FOO).)*?)FOO(?=.*END_TAG)", "<REPLACED>");
参见regex demo。
详情
((?:\G(?!\A)|START_TAG)(?:(?!START_TAG|FOO).)*?)
- 第 1 组:
(?:\G(?!\A)|START_TAG)
- 上一场比赛结束或 START_TAG
(?:(?!START_TAG|FOO).)*?)
- 任何字符,重复 0+ 次,尽可能少,不启动 START_TAG
和 FOO
字符序列
FOO
- 一个FOO
来匹配和替换
(?=.*END_TAG)
- 检查当前位置右侧有 END_TAG
的正向前瞻。
在 JS 中,两步替换似乎是最好的:
var rx = /START_TAG[\s\S]*?END_TAG/g;
var str = "Text multiline, bla bla bla **FOO** text text text *START_TAG* text text text text **FOO** a lot of texts\n**FOO** more text\n*END_TAG*";
var result = str.replace(rx, function ([=11=]) {return [=11=].replace(/FOO/g, "<REPLACED>");} );
console.log(result);
我正在尝试替换一些字符串,但我的条件是该字符串必须在 "tag" 内。 我如何使用正则表达式来做到这一点?
例如:
Text multiline, bla bla bla **FOO** text text text
*START_TAG* text text text text **FOO** a lot of texts
**FOO** more text
*END_TAG*
我想替换 FOO 介于 START_TAG 和 [=37= 之间的文本]
我试过这样做:
(?<=word1)(.*?)(?=word2)
或
(?<=word1)FOO(?=word2)
但在第一种情况下,我得到了标签中的所有内容,而在第二种情况下,什么也找不到。
我搜索了很多,但人们习惯于搜索括号内的字符串或单词之间的所有文本等
我正在使用 Java 来执行此操作,但也可以在 javascript.
中在 Java 中,您可以使用 one-regex 解决方案,例如
String result = s.replaceAll("((?:\G(?!\A)|START_TAG)(?:(?!START_TAG|FOO).)*?)FOO(?=.*END_TAG)", "<REPLACED>");
参见regex demo。
详情
((?:\G(?!\A)|START_TAG)(?:(?!START_TAG|FOO).)*?)
- 第 1 组:(?:\G(?!\A)|START_TAG)
- 上一场比赛结束或START_TAG
(?:(?!START_TAG|FOO).)*?)
- 任何字符,重复 0+ 次,尽可能少,不启动START_TAG
和FOO
字符序列
FOO
- 一个FOO
来匹配和替换(?=.*END_TAG)
- 检查当前位置右侧有END_TAG
的正向前瞻。
在 JS 中,两步替换似乎是最好的:
var rx = /START_TAG[\s\S]*?END_TAG/g;
var str = "Text multiline, bla bla bla **FOO** text text text *START_TAG* text text text text **FOO** a lot of texts\n**FOO** more text\n*END_TAG*";
var result = str.replace(rx, function ([=11=]) {return [=11=].replace(/FOO/g, "<REPLACED>");} );
console.log(result);