我正在开发一个需要在HTML驱动的文本视图(DTCoreText)中显示HTML内容的iOS应用程序。 无论如何,客户决定在特殊HTML评论中提供视频,我应该将其变成标签。
评论格式是这样的
<!-- placeholder_video:url_of_video.mp4 -->
我希望我能写一个正则表达式来匹配整个评论,提取内容并用一个指向正确URL的元素替换它通过NSRegularExpression的stringByReplacingMatchesInString:options:range:withTemplate:但我可以&#39 ;为了我的生活,我找出了正则表达式。
我能想到的最好的是
(?<=<!-- placeholder_video:)(.*)(?=-->)
哪个匹配评论的内容(mp4网址),但我需要它来匹配整个评论,并将内容提取为子模式(如果我理解正确,我稍后将通过\ 1访问)所以我可以使用替换模式用适当的<video src="url_of_video.mp4">
字符串
可以吗?或者我最好尝试两次通过吗? (匹配整个评论然后对该评论运行另一个正则表达式以提取URL并替换前者?
答案 0 :(得分:1)
根据您的问题现在看起来的方式(忘记粘贴评论的示例),很难给出一个好的答案。
但是既然你提到了这个:
(?<=<!-- placeholder_video:)(.*)(?=-->)
将设法获取评论的内容。因为你说你想要的就是捕捉整个评论。
然后,如果我理解正确的话,我会说你真正需要做的就是在你的整个表情周围添加一个捕捉组,并放弃回顾和前瞻。
(也许还避免抓住前导和尾随空格)
(<!-- placeholder_video:\s*(.*)\s*-->)
使用以下方法进行测试时:
<!-- placeholder_video: url_of_video.mp4 -->
我会得到两组:
1: <!-- placeholder_video: url_of_video.mp4 -->
2: url_of_video.mp4
如果您愿意,也可以提供您的群组名称,以便更容易引用它们:
(?<comment><!-- placeholder_video:\s*(?<url>.*)\s*-->)
你也可以使用\ 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/