주어진 JavaScript 코드에서 모든 변수 (메서드 만 완전히 무시하고 변수 만 찾습니다)를 찾는 정규 표현식을 작성하려고합니다. 실제 코드 (regex를 실행하는 코드)는 Java로 작성됩니다.변수를 찾고 메서드를 무시하는 정규식
지금, 나는 이런 식으로 뭔가를 가지고 :
Matcher matcher=Pattern.compile(".*?([a-z]+\\w*?).*?").matcher(string);
while(matcher.find()) {
System.out.println(matcher.group(1));
}
그래서 때 "문자열"의 값은 variable*func()*20
출력입니다 :
variable
func
하지 무엇을하는 내가 원하는. (
의 간단한 부정은 정규 표현식이 불필요한 문자를 잡아 내거나 잘라내 버리기 때문에 발생하지 않지만 여전히 함수가 캡처됩니다. 지금, 나는 다음과 같은 코드가 있습니다
Matcher matcher=Pattern.compile(".*?(([a-z]+\\w*)(\\(?)).*?").matcher(formula);
while(matcher.find()) {
if(matcher.group(3).isEmpty()) {
System.out.println(matcher.group(2));
}
}
, 인쇄물이 올바른지,하지만 난 추가 검사를 좋아하지 않는다. 어떤 아이디어? 부디?
EDIT (2011-04-12) :
모든 답변에 감사드립니다. 질문이 있는데, 왜 내가 그런 것을 필요로할까요? 그리고 당신이 옳다면, 더 크고 복잡한 스크립트의 경우, 유일한 제정신의 해결책은 그들을 파싱 할 것입니다. 그러나 제 경우에는 과도한 행동입니다. 내가 일하는 JS의 스크랩은 단순한 수식으로 의도되어 있습니다. (a+b)/2
과 같습니다. 주석, 문자열 리터럴, 배열 등이 없습니다. 변수와 (아마도) 내장 함수 만 가능합니다. 나는 그들이 초기화 될 수 있는지 그리고이 시점에서 (그리고 전혀 초기화되었는지) 확인하기 위해 변수 목록이 필요하다. RPN으로 모든 작업을 수동으로 수행 할 수 있다는 것을 알고 있습니다. (더 안전 할 것입니다.)하지만이 공식은 더 큰 스크립트로 랩핑되고 웹 브라우저에서 평가되므로이 방법이 더 편리합니다.
이것은 약간 더러울 수 있지만,이 수식을 작성하는 사람 (대부분 나에게 아마도 대부분)은 무엇을하고 있는지를 알고 있고 올바르게 작동하는지 확인할 수 있다고 가정합니다.
누구나 비슷한 질문을하고 싶다면 위험/어려움이 있어야합니다. 적어도, 나는 희망한다.)
정확히는 같지 않지만 다음을보십시오 : http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454 # 1732454 정규식은 만병 통치약이 아닙니다! – Serafeim