0

大家好,感谢您对此的关注。好吧,我试图用一个词替换每个完整的 youtube 网址。一个例子:

http://www.youtube.com/watch?v=lDC0gdrcauI Should be replaced with the word "Video"
http://www.youtube.com/watch?v=ef0wk8QoA34&feature=g-all-u Should be replaced with the word "Video"

到目前为止,这是我的代码。HTML:

<p>My brother is great.</p>
<p>http://www.youtube.com/watch?v=ef0wk8QoA34</p>

​ 和 JS:

(function($) {

    $(function(){
    var thePage = $("body");
    thePage.html(thePage.html().replace(/My brother/g, 'My Pig').replace(/youtube.com/g, 'video'));
    });

})(jQuery)

一个 JSFiddle 可以在这里找到:http: //jsfiddle.net/QmRc7/2/

所以,如果你能帮我解决这个问题,那就太好了!谢谢!

PS:对不起,我的帖子不是我编辑的:/

解决了!我只是添加了这个并且对每个人都很好+1!:

.replace(/(www.)?youtu(be\.com|\.be)\/(watch\?v=)?([A-Za-z0-9._%-]*)(\&\S+)?/g, '')
4

3 回答 3

3

如果我正确理解您的问题(从它的标题),您想在其内容(文本)上使用正则表达式过滤锚标签:

你可以这样

$('a').filter(function() {
    return $(this).text().match(/^(?:https?:\/\/)?(?:www\.)?youtube\.com\/watch\?(?=.*v=((\w|-){11}))(?:\S+)?$/g);
}).each(function() {
    $(this).text($(this).text().replace(/youtube.com/g, 'video'));
});

代码基本上,选择文本匹配 youtube url 模式的锚标签,我从这个答案中复制,对于每个匹配的锚标签,替换youtube.comvideo.


回答更新的问题:

你可以这样

$('a').filter(function() {
    return $(this).text().match(/^(?:https?:\/\/)?(?:www\.)?youtube\.com\/watch\?(?=.*v=((\w|-){11}))(?:\S+)?$/g);
}).each(function() {
    $(this).text('Video');
});

请注意,它不匹配非锚标签,您可以使用$('*')而不是$('a')选择所有节点。


第二个单词的变化可以通过这种方式轻松完成:

$('p').each(function() {
    $(this).text($(this).text().replace(/My brother/g, 'My Pig'));
});

不用说,您应该更改选择器以匹配您想要的节点。

于 2012-06-12T03:54:38.463 回答
1

这个正则表达式可能需要更多的调整来获得所有可能的 youtube URL 模式,但这将是一个好的开始:

http:\/\/www\.youtube\.com\/[\w?=&-]+
于 2012-06-12T03:19:19.093 回答
0

几个小时后......我终于在你的帮助下解决了这个问题。

.replace(/(www.)?youtu(be\.com|\.be)\/(watch\?v=)?([A-Za-z0-9._%-]*)(\&\S+)?/g, '')
于 2012-06-12T14:10:58.370 回答