如何使用regex在以前的搜索结果中进行搜索和替换
How can I search and replace, using regex, within the results of a previous search?
感谢您花时间阅读本文,如果这有点令人困惑、补救或之前有人问过(大量搜索,结果有限),请立即道歉。
我正在使用过时的软件进行编辑,如果你熟悉的话,HomeSite5,它允许使用脚本。
我的难题如下:
我想隔离多个文本选择。我目前使用的是一个(冗长的)regex,它捕获特定设置日期(在本例中为"2030-12-31")之后的所有内容,直到它到达某个标记(在本实例中为
]]<content>
)。到目前为止,我已经做到了。然后,我只想在之前找到的文本选择中删除它包含的所有
<span>
标记。但是,我希望文本的其他部分中的<span>
标记保持不变(例如那些分配了较早日期的标记)。
我可以单独执行这两个功能,隔离特定部分或删除所有<span>
标签,我觉得只有一个我不知道的链接可以让我在另一个中运行一个。
如果答案很简单,再次道歉;我对脚本和正则表达式的了解充其量是有限的。我的大部分工作都是使用Jscript完成的,但我不确定HomeSite是否接受其他格式——我对多种解决方案持开放态度!
TLDR:仅在特定选择中搜索和替换,如前一个正则表达式所指定。
编辑1:请参阅下面用于隔离所需部分的表达式。第一个是整个表达式。第二个是捕获内容的容器
/<version recordId="([0-9]{4,})" start="2030-12-31"([^>]*)>([^<]*)<title><!'[CDATA'[<span class="uk">([^<]*)<'/span>']']><'/title>([^<]*)<number><!'[CDATA'[<span class="uk">([0-9]{1,3})'.<'/span>']']><'/number>([^<]*)<content><!'[CDATA'[([^]]*)']']><'/content>([^<]*)<'/version>/g;
..<content><!'[CDATA'[([^]]*)']']></content>..
在此范围内,我将跳到修改如下:
<span class="uk">content</span>
content
既然我已经在公共场合把它打出来了,我就知道这是一个多么恐怖的常规表达节目,我向斯塔克弗洛的优秀程序员道歉,因为他们不得不看它!
编辑2:请参阅以下所需输出的示例:
<version recordId="1234" start="2012-01-01"><stuffhere...<content><![CDATA[[
<span class="uk">content1</span>
<span class="uk">content2</span>
]]</content>
</version>
<version record="4231" start="2030-12-31"><stuffhere...<content><![CDATA[[
<span class="uk">content1</span>
<span class="uk">content2</span>
]]</content>
</version>
BECOMES
<version recordId="1234" start="2012-01-01"><stuffhere...<content><![CDATA[[
<span class="uk">content1</span>
<span class="uk">content2</span>
]]</content>
</version>
<version record="4231" start="2030-12-31"><stuffhere...<content><![CDATA[[
content1
content2
]]</content>
</version>
n.b:感谢Hannele早期的格式更正。
使用带有String.replace()
的回调函数
String.replace()
方法的第二个参数(替换文本)可以指定为回调函数。这个回调函数又可以有另一个replace()
调用。通过这种方式,您可以轻松地处理一节中的文本。下面是一个演示该技术的示例。
给定此示例文本:
之前:
blah foo? foo blah foo, foo.
<section1>blah foo? foo blah foo, foo.</section1>
blah foo? foo blah foo, foo.
<section2>blah foo? foo blah foo, foo.</section2>
blah foo? foo blah foo, foo.
假设您希望用bar
替换每个foo
,但仅限于部分。通过使用回调函数作为String.replace()
方法的替换参数,可以很容易地做到这一点,如下所示:
function f1(text) {
var re1 = /<section('d+)>['S's]*?<'/section'1>/g;
var re2 = /foo/ig;
text = text.replace(re1,
function(m0, m1){
return m0.replace(re2, 'bar');
});
return text;
}
当找到模式匹配时,replace()
方法调用回调函数,并在第一个参数中传递整个匹配(在上面的示例中,我将其命名为:"m0"
)。如果regex有捕获组,则这些组中每个组的匹配文本都会在以下参数中传递(在这种情况下,只有一个捕获组,我将此参数命名为:"m1"
-请注意,该函数不使用此参数)。
以下是经过上述功能处理后的示例文本:
之后:
blah foo? foo blah foo, foo.
<section1>blah bar? bar blah bar, bar.</section1>
blah foo? foo blah foo, foo.
<section2>blah bar? bar blah bar, bar.</section2>
blah foo? foo blah foo, foo.
- Javascript搜索和替换需要包含更多内容
- 搜索并用jQuery替换整个HTML字符串
- javascript:搜索并用不同的颜色代码替换十六进制颜色代码
- IntellijJavascript多行结构搜索和替换
- 可以用两个搜索值替换JavaScript.replacement函数
- RegExp-替换搜索时的“html”标记并突出显示
- 在搜索表单中,替换空格或仅使用正则表达式的隐词和数字
- 如何使用regex在以前的搜索结果中进行搜索和替换
- JQuery 在渲染后搜索 dom 元素,并用其相应的值替换键
- 搜索/将自定义标记替换为 javascript 正则表达式
- 搜索与搜索和替换
- jQuery搜索和替换不起作用(Wordpress)
- javascript 或 PHP 来执行搜索和替换功能
- 多个下拉列表搜索替换字符串
- Javascript - 搜索网站的 HTML 并替换它
- 根据搜索/替换对替换字符串中的多个值
- 使用正则表达式进行搜索/替换
- Javascript正则表达式搜索/替换跳过匹配
- 如何使用Javascript/jQuery在发送到剪贴板之前搜索/替换正在复制的文本
- 以编程方式打开搜索/替换框