我有一个html页面,其中包含嵌入脚本标记内的小javascript函数。我在同一页面内编写另一个javascript / jquery函数,将此页面作为文本加载到变量中,并在较小的javascript函数中搜索代码。
实施例: 这是我的文件: abc.html 。理想情况下,搜索应返回 alert(element)。
<!DOCTYPE html>
<html>
<body>
<button id="btn-get">$.get()</button>
<script data-require="jquery" data-semver="2.0.3" src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
<script type="text/javascript" charset="utf-8">
function getValue(element)
{
alert(element);
//end
}
var content, matched;
$('#btn-get').click(function(e)
{
$.get('abc.html', function(data)
{
content = data;
});
matched = String(content).match("getValue(.*)end");
console.log(matched);
});
</script>
</body>
</html>
这会从搜索查询中返回(。*),这不是我想要的。 我已经尝试了以下SO帖子中的建议:
Regex get all content between two characters
Find string between two strings in Javascript or jQuery
regex search a string for contents between two strings
它们返回null值。我也试过使用split,pop。这种情况没有任何作用。 可以这样做吗?获得正确输出的最佳方法是什么? 提前谢谢!
答案 0 :(得分:1)
由于SO,我想出了一个非常明显和简单的方法。
由于html中的每个标记都可以分配一个id,我只需从getValue函数中创建一个单独的脚本并为其分配一个id,然后使用$(“#id).html()来访问其内容。” p>
<!DOCTYPE html>
<html>
<body>
<button id="btn-get">$.get()</button>
<script data-require="jquery" data-semver="2.0.3" src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
<script id="getvalue" type="text/javascript" charset="utf-8">
function getValue(element)
{
alert(element);
//end
}
</script>
<script>
var content, matched;
$('#btn-get').click(function(e)
{
var temp = $('#getvalue').html();
console.log(temp.substring(temp.indexOf('{')+1,temp.lastIndexOf('}')));
});
</script>
</body>
</html>
答案 1 :(得分:0)
在这种特殊情况下,这个正则表达式符合您的要求:
/{\s*([\s\S]*?)\s*}/
但是,如果小javascript函数包含一个包含自己的大括号的语句,例如if () {}
语句,它将不会产生您想要的结果。
你为什么需要这样做?如果不解析函数的HTML文本,有可能有更好的方法来实现相同的结果。