我正在开发一个 iOS 应用程序,它需要在 HTML 支持的 TextView (DTCoreText) 中显示 HTML 内容。 无论出于何种原因,客户决定在特殊的 HTML 注释中提供视频,我应该将其转换为标签。
评论格式是这样的
<!-- placeholder_video:url_of_video.mp4 -->
我希望我可以编写一个正则表达式来匹配整个评论,提取内容并将其替换为通过 NSRegularExpression 的 stringByReplacingMatchesInString:options:range:withTemplate: 指向正确 URL 的元素,但我终生做不到我找出正则表达式。
我能想到的最好的是
(?<=<!-- placeholder_video:)(.*)(?=-->)
它匹配评论的内容(mp4 URL),但我需要它来匹配整个评论并将内容提取为子模式(如果我理解正确的话,我稍后会通过\1 访问)所以我可以使用一个替换模式,可以用适当的 <video src="url_of_video.mp4">
快速替换评论字符串
可以吗?还是我最好尝试分两次通过? (匹配整个评论,然后对该评论运行另一个正则表达式以提取 URL 并替换前者?
最佳答案
根据您现在的问题(忘记粘贴评论的示例),很难给出好的答案。
但是既然你提到了这个:
(?<=<!-- placeholder_video:)(.*)(?=-->)
将设法获取评论的内容。既然你说你想要的只是捕获整个评论。
然后,如果我理解正确的话,我会说您真正需要做的就是在您的整个表达式周围添加一个捕获组并删除回溯和前瞻。
(也许也避免捕获前导和尾随空格)
(<!-- placeholder_video:\s*(.*)\s*-->)
使用以下内容进行测试时:
<!-- placeholder_video: url_of_video.mp4 -->
我会得到 2 组:
1: <!-- placeholder_video: url_of_video.mp4 -->
2: url_of_video.mp4
如果你愿意,你也可以给你的组命名,以便于引用它们:
(?<comment><!-- placeholder_video:\s*(?<url>.*)\s*-->)
您也可以在正则表达式中使用\n 来引用第 n 组。
如果您计划在单个正则表达式中用第二个捕获组替换第一个捕获组,那么您如何操作将取决于语言。某些语言(如 C#)允许您提供自己的替换方法,这是一种选择。但我假设您不在此处使用 C#。
在 Javascript 中,您可以简单地使用 $n 来引用第 n 个匹配组作为替换值。 (你也可以提供一个功能,但你不需要)
JS 中的完整工作示例(使用 jQuery 但不需要):
<div id="example">
<!-- placeholder_video: url_of_video.mp4 -->
</div>
<script>
var str = $("#example").html();
var str2 = str.replace(/(<!-- placeholder_video:\s*(.*)\s*-->)/g, "<video src=\"$2\">");
alert(str2);
</script>
您可以在此处查看有效的 jsfiddle 示例:http://jsfiddle.net/72WeZ/
关于html - 用 HTML 元素替换占位符 HTML 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24808246/