求一条正则表达式

harryCom 2008-06-17 10:25:50
目的是从一堆js代码获取某个js函数,如js代码是:
function a(){...}function b(){if(xxx){...}for(xxx,xxx,xxx){...}}function c(){...}
我想通过正则获取函数b,所以得到的结果是:function b(){if(xxx){...}for(xxx,xxx,xxx){...}}
...全文
169 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
harryCom 2008-06-17
  • 打赏
  • 举报
回复
用这个可以搞定了,谢谢!

[Quote=引用 11 楼 dk385 的回复:]
C# code
function[\s]+b\([^\)]*\)(((?'fn'\{)[^\{\}]*)+(?'-fn'\}[^\{\}]*?)+)+(?(fn)(?!))
[/Quote]
家鸣 2008-06-17
  • 打赏
  • 举报
回复
如果还要考虑函数里又有function

function[\s]+(b|func2|func3)\([^\)]*\)(((?'fn'\{)[^\{\}]*)+(?'-fn'\}[^\{\}]*?)+)+(?(fn)(?!))

在上面的Code中(b|func2|func3)这里加上你的子函数名吧,如b函数里有func2,func3两个子函数。
rainsome 2008-06-17
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 Rainsome 的回复:]
注意这一句
JScript codedocument.getElementById("ShowResult").innerHTML="结果:"+A2C;
[/Quote]
红色为function名
rainsome 2008-06-17
  • 打赏
  • 举报
回复
注意这一句

document.getElementById("ShowResult").innerHTML ="结果:" +A2C;
rainsome 2008-06-17
  • 打赏
  • 举报
回复
直接用函数名

<html>
<head>
<title>直接用函数</title>
<meta http-equiv="Content-type" content="text/html;charset=gb2312" />
<style type="text/css">
<!--
#ShowResult{
color:#f00;
font:12pt arial;
}
#title{
font:14pt arial,verdana,sans-serif;
}

-->
</style>
<script language="javascript">
<!--
function A2C()
{
var strResult="";
var j=0;
strResult += String.fromCharCode(12288);
for(var i=65281;i<=65374;i++)
{
strResult += String.fromCharCode(i);
j++;
if(j==10)
{
strResult +="<br />";
j=0
}
}
//alert(b);
//document.getElementById("ShowResult").innerHTML ="字符:" +strResult;
document.getElementById("ShowResult").innerHTML ="结果:" +A2C;
return A2C;
}


-->
</script>
</head>
<body >
<div >
<div id="title" >ASCII code to Char,Char to ASCII code.</div>
<hr />
<form id="frmRegex"><br />
<div id="ShowResult"></div><br /><br />
<div><input type="button" onclick="javascript:A2C();/*alert();*/" value="Click Here!"></div>
</form>

</div>
</body>
</html>
家鸣 2008-06-17
  • 打赏
  • 举报
回复
其中function[\s]+b这里的b替换成你的函数名就可。
家鸣 2008-06-17
  • 打赏
  • 举报
回复

function[\s]+b\([^\)]*\)(((?'fn'\{)[^\{\}]*)+(?'-fn'\}[^\{\}]*?)+)+(?(fn)(?!))
harryCom 2008-06-17
  • 打赏
  • 举报
回复
但是这里是不知道function b后面是跟着function c的

[Quote=引用 8 楼 bejon 的回复:]
源:function a(){...}function b(){if(xxx){...}for(xxx,xxx,xxx){...}}function c(){...}
正则:
regex reg=new regex("function b().*?(?=function c())", RegexOptions.Singleline ¦ RegexOptions.IgnoreCase);
[/Quote]
harryCom 2008-06-17
  • 打赏
  • 举报
回复
或者我说清楚一点目的吧,其实是为了分析和获取网页上部分的js代码,这个js代码可能是压缩过的,会去掉所有换行和注释,空格,所以看到的很长一段js都是只有一行,还有就是我是在winapp上运行,不是在asp.net

[Quote=引用 3 楼 guilin_gavin 的回复:]
关注中……
PS:
如果只是提取代码,有必要将这些函数都写成一个很长的字符串后再进行提取么?这样做会不会增加出错几率呢?
[/Quote]
阿牛138588 2008-06-17
  • 打赏
  • 举报
回复
源:function a(){...}function b(){if(xxx){...}for(xxx,xxx,xxx){...}}function c(){...}
正则:
regex reg=new regex("function b().*?(?=function c())", RegexOptions.Singleline | RegexOptions.IgnoreCase);
harryCom 2008-06-17
  • 打赏
  • 举报
回复
这个我也想过,不过function里面又有function就麻烦了

[Quote=引用 6 楼 xxoo2007 的回复:]
试试 function b.+function
[/Quote]
xxoo2007 2008-06-17
  • 打赏
  • 举报
回复
试试 function b.+function
yilanwuyu123 2008-06-17
  • 打赏
  • 举报
回复
正则表达式不太合适吧 做为静态方法 直接调用就OK了。
daxiong105 2008-06-17
  • 打赏
  • 举报
回复
支持1楼
guilin_gavin 2008-06-17
  • 打赏
  • 举报
回复
关注中……
PS:
如果只是提取代码,有必要将这些函数都写成一个很长的字符串后再进行提取么?这样做会不会增加出错几率呢?
harryCom 2008-06-17
  • 打赏
  • 举报
回复
因为我不是在web上使用,是提取代码用的
sxmonsy 2008-06-17
  • 打赏
  • 举报
回复
为什么要用正则呢?直接在后台找function B就是了.

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧