정규표현식을 여쭤볼려고 합니다. 좀 어렵네요. 아래와 같은 코드(자바스크립트 코드)가 있다고 했을 때 함수명만 잡아내고 싶습니다.
var t1 = 10; function test1 (var x) { } function test2() { } test1();
위와 같은 코드라면 test1, test2 만 잡아내고 싶습니다. 이렇게 잡아 낼수 있는 정규표현식을 좀 알려 주세요.
감사합니다 ^^
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 를 쓰지 않고 해야 합니다. 가능할까요?
# 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 등은 검출되면 안되는데 되고 있어요. 도움 주세요.
([a-zA-Z]\w*)(?=\s*\()
넣어봤는데 똑같이 Nooo 등도 선택되는 것으로 나타나네요.
저렇게 찾는건 잘 모르겠네용 ㅋ
그냥 function\s+([a-zA-Z]\w*)\s*\( 이렇게 찾은다음에 괄호에 매칭되는걸 변수($1)로 뽑아서 사용하는 방법은 어떤가요?
http://myregexp.com/signedJar.html 에 넣어 봤는데 아무것도 선택되지 않는군요.
?!는 negative lookback 아닌가요? ?! 대신 ?<= 을 써야할듯.. (엔진마다 다를 수도..) lookback에서 *등을 쓸수가 없으니 \s+를 빼고해보시고..
해봤는데 아무것도 선택되지 않네요
\s+를 뺀다는 의미는 괄호밖으로 뺀다는 뜻입니다.. 혹시나..
아, 그렇군요. 해보니 되는데 test1 앞의 공백까지 모두 선택이 됩니다. 이 공백을 제거할 수 있을까요? 감사합니다.
<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 내에서만 가능한거죠?
텍스트 포맷에 대한 자세한 정보
<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]
GNU grep의 경우에$ grep -o -P
GNU grep의 경우에
또는 일반 grep의 경우라도,
grep과 sed를 합쳐서 더 간단히 될 것 같은데요...
grep과 sed 를 쓰지 않고 해야 합니다
grep과 sed 를 쓰지 않고 해야 합니다. 가능할까요?
저는 보통 이렇게
# grep '[a-zA-Z]\w*\s*(' test.js
현재 이걸로 씨름하고 있습니다
패턴은 아래와 같고
테스트하고 있는 js 코드는 아래와 같습니다.
http://myregexp.com/signedJar.html 에 넣고 바로 바로 체크하면서 보고 있는데 깔끔하게 안되네요.
Nooo 등은 검출되면 안되는데 되고 있어요. 도움 주세요.
([a-zA-Z]\w*)(?=\s*\()
([a-zA-Z]\w*)(?=\s*\()
넣어봤는데 똑같이 Nooo 등도 선택되는 것으로
넣어봤는데 똑같이 Nooo 등도 선택되는 것으로 나타나네요.
아 noo 등은 선택되면 안된다고용..
저렇게 찾는건 잘 모르겠네용 ㅋ
그냥
function\s+([a-zA-Z]\w*)\s*\( 이렇게 찾은다음에
괄호에 매칭되는걸 변수($1)로 뽑아서 사용하는 방법은 어떤가요?
http://myregexp.com/signedJar
http://myregexp.com/signedJar.html 에 넣어 봤는데 아무것도 선택되지 않는군요.
?!는 negative lookback 아닌가요?
?!는 negative lookback 아닌가요? ?! 대신 ?<= 을 써야할듯.. (엔진마다 다를 수도..)
lookback에서 *등을 쓸수가 없으니 \s+를 빼고해보시고..
해봤는데 아무것도 선택되지 않네요
해봤는데 아무것도 선택되지 않네요
\s+를 뺀다는 의미는 괄호밖으로 뺀다는 뜻입니다..
\s+를 뺀다는 의미는 괄호밖으로 뺀다는 뜻입니다.. 혹시나..
아, 그렇군요. 해보니 되는데 test1 앞의
아, 그렇군요. 해보니 되는데
test1 앞의 공백까지 모두 선택이 됩니다.
이 공백을 제거할 수 있을까요? 감사합니다.
javascript 소스
결과 : test test1 test2
원하시는건 아니지만 참고하시라고...
결과는 딱 제가 원하는 것 같은데 javascript
결과는 딱 제가 원하는 것 같은데 javascript 내에서만 가능한거죠?
댓글 달기