정규표현식 질문입니다 (javascript 함수 이름만 잡아내기)

라스코니의 이미지

정규표현식을 여쭤볼려고 합니다. 좀 어렵네요.
아래와 같은 코드(자바스크립트 코드)가 있다고 했을 때 함수명만 잡아내고 싶습니다.

var t1 = 10;
 
function test1 (var x)
{
}
 
function test2()
{
}
 
test1();

위와 같은 코드라면 test1, test2 만 잡아내고 싶습니다. 이렇게 잡아 낼수 있는 정규표현식을 좀 알려 주세요.

감사합니다 ^^

qiiiiiiiip의 이미지

GNU grep의 경우에

$ grep -o -P "^\s*function\s+\S+(?=\s*\([^)]*)" your_script.java | sed "s,\s*function\s*,,"

또는 일반 grep의 경우라도,

$ grep "^\s*function\s" your_script.java | sed -e "s,\(\s*function\s\+\)\(\S\+\)\(\s*([^)]*)\),\2,"

grep과 sed를 합쳐서 더 간단히 될 것 같은데요...

라스코니의 이미지

grep과 sed 를 쓰지 않고 해야 합니다. 가능할까요?

pogusm의 이미지

# grep '[a-zA-Z]\w*\s*(' test.js

라스코니의 이미지

패턴은 아래와 같고

(?!function\s+)([_$a-zA-Z][_$a-zA-Z0-9]*)(?=\s*\()

테스트하고 있는 js 코드는 아래와 같습니다.

// TEST.Nooo()
 
function test ()
{
}
 
function test1()
{
}
 
function test2     ()
{
    Nooo1();
    Nooo2  ();
}

http://myregexp.com/signedJar.html 에 넣고 바로 바로 체크하면서 보고 있는데 깔끔하게 안되네요.
Nooo 등은 검출되면 안되는데 되고 있어요. 도움 주세요.

pogusm의 이미지

([a-zA-Z]\w*)(?=\s*\()

라스코니의 이미지

넣어봤는데 똑같이 Nooo 등도 선택되는 것으로 나타나네요.

pogusm의 이미지

저렇게 찾는건 잘 모르겠네용 ㅋ

그냥
function\s+([a-zA-Z]\w*)\s*\( 이렇게 찾은다음에
괄호에 매칭되는걸 변수($1)로 뽑아서 사용하는 방법은 어떤가요?

라스코니의 이미지

http://myregexp.com/signedJar.html 에 넣어 봤는데 아무것도 선택되지 않는군요.

qiiiiiiiip의 이미지

?!는 negative lookback 아닌가요? ?! 대신 ?<= 을 써야할듯.. (엔진마다 다를 수도..)
lookback에서 *등을 쓸수가 없으니 \s+를 빼고해보시고..

라스코니의 이미지

해봤는데 아무것도 선택되지 않네요

qiiiiiiiip의 이미지

\s+를 뺀다는 의미는 괄호밖으로 뺀다는 뜻입니다.. 혹시나..

라스코니의 이미지

아, 그렇군요. 해보니 되는데
test1 앞의 공백까지 모두 선택이 됩니다.
이 공백을 제거할 수 있을까요? 감사합니다.

pogusm의 이미지

<script type="text/javascript">
var re = /function\s+([a-zA-Z]\w*)\s*\(/g;
var str = "TEST.Nooo()\nfunction test ()\n{\n}\nfunction test1()\n{\n}\nfunction test2     ()\n{\n    Nooo1();\n    Nooo2  ();\n}";
var resultArray = re.exec(str);
while (resultArray) {
    document.writeln(resultArray[1] + " ");
    resultArray = re.exec(str);
}
</script>

결과 : test test1 test2

원하시는건 아니지만 참고하시라고...

라스코니의 이미지

결과는 딱 제가 원하는 것 같은데 javascript 내에서만 가능한거죠?

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.