gpt4 book ai didi

javascript - 需要帮助将 Perl 正则表达式转换为 Javascript 正则表达式

转载 作者:行者123 更新时间:2023-11-29 17:24:33 25 4
gpt4 key购买 nike

我希望从多行文本字符串中挖掘出一些好东西。我很乐意在 Perl 中执行正则表达式(虽然我确信有比我下面的代码更好的方法),但我真的不知道如何在 Javascript 中使用正则表达式中的标记字符串作为 newSubStr 的一部分。有没有办法或者我是否坚持运行多个替换来放弃音频和源代码行?

$_ = <<END;
<audio controls="controls" preload="metadata">
<source src="01.mp3" type="audio/mpeg">
<source src="01.ogg" type="audio/ogg">
Stuff
Default: <a href="01.mp3">&gt;&gt;download</a>
</audio>
END

s#.*<source.*?>.*?\n(.*)\n</audio>.*#$1#s;

print "[$_]\n";

(我有限的)Javascript 中的多个正则表达式可能是这样的:

// We're really dependent on the HTML layout for line feeds
// so watch out.
var line = aElems[i].innerHTML.replace(/.*?audio.*?\n/gm, '');
var line2 = line.replace(/.*<source.*?\n/mg, '');
console.log(line2);

最佳答案

虽然您说您想使用 JavaScript,但我想我会向您展示非正则表达式的 Perl 方法。 HTML::TokeParser::Simple让它变得非常简单:

use HTML::TokeParser::Simple;
my $p = HTML::TokeParser::Simple->new( *DATA );

TOKEN: while( my $token = $p->get_token ) {
if( $token->is_start_tag( 'audio' ) ){
AUDIO: while( my $t = $p->get_token ) {
next AUDIO if $t->is_tag( 'source' );
last AUDIO if $t->is_end_tag( 'audio' );
print $t->as_is;
}
next TOKEN;
}

print $token->as_is;
}

__DATA__
<html>
<head><title>Test</title></head>
<body>
<p>Keep this</p>
<audio controls="controls" preload="metadata">
<source src="01.mp3" type="audio/mpeg">
<source src="01.ogg" type="audio/ogg">
Stuff
Default: <a href="01.mp3">&gt;&gt;download</a>
</audio>
<p>Keep this</p>
</body>
</html>

这给出:

<html>
<head><title>Test</title></head>
<body>
<p>Keep this</p>



Stuff
Default: <a href="01.mp3">&gt;&gt;download</a>

<p>Keep this</p>
</body>
</html>

还有其他 Perl 模块可以正确解析 HTML 并处理该结构。

对于 JavaScript 方面,为什么不直接替换 HTML?我知道你问过a related question about this .在我看来,应该有其他东西在音频中生成内容,并且在这种情况下应该能够为您提供您喜欢的内容。我会后退一步并继续努力。或者,您可以详细解释您的问题。

关于javascript - 需要帮助将 Perl 正则表达式转换为 Javascript 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10016414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com