2017-03-28 1 views
1

나는 --[[ 하나 + --]]에 줄에서 contents.match(new RegExp(/--\[\[\s([^]*?)\s--\]\]\s(.*)/, 'g'));정규식 자바 스크립트를 여러 그룹 일치 반환

https://regex101.com/r/7yjQCS/2 작품에 JS 모드에서이 정규 표현식을 테스트하지만,에서와 그 후 일치하는 그룹을 원한다 node.js --]]까지 일치합니까?

-

결과 :

--[[ * a * b * c --]]

- 예상

:

--[[ * a * b * c --]] function name(x, y) {

-

코드 :

var contents = "--[[\n * a\n * b\n * c\n--]]\nfunction name(x, y) {\n ...\n}\n\n--[[\n * a\n * b\n * c\n--]]\nfunction name(x, y) {\n ...\n}"; var inputs = contents.match(new RegExp(/--\[\[\s([^]*?)\s--\]\]\s(.*)/, 'g'));

+0

나는 정확하게 코드를 실행, 당신이있는 노드 버전 알고 있지만하지는. Node.js에서 테스트되었습니다. –

+0

함수 이름 (x, y) { ", "- [[\ n * - [[\ n * a \ n * b \ n * c \ n -]] \ n 함수 이름 (x, y) { " "- 당신은 무엇을 기대합니까? –

답변

0

[^] 정규식 땅에서 오류가 발생합니다.

이유는 정의되지 않았습니다.
음수 클래스는 의 값이이 아니어야합니다. 그렇지 않으면 의미가 없습니다.

JS에서 오류가 발생하지 않으면 동작을 예측할 수 없습니다.

이 문자는 어떤 문자와도 일치하므로 대신 [\S\s]을 사용해야합니다.

또한 생산 라인의 마지막 줄과 일치하지 않는 이유는 JS
입니다. 라인 앞에 하나의 공백 만 허용하려면 \s입니다.
마지막 줄은 선택 사항이므로 공백은 CRLF
(MS OS의 경우)의 CR과 일치합니다.

해결하려면 열린 번호 \s+으로 수정하십시오. 당신이 마지막 정규식은 이제 모든 플랫폼에서 작동이 https://regex101.com/r/7yjQCS/4
과 같을 것이다

[[ ]] 사이의 문자를 일치하기 때문에
또한, 처음 두 \s은 필요하지 않습니다. 피고측은 서면 나에게 원하는 예상 출력을 내 주면서

--\[\[([\S\s]*?)--\]\]\s+(.*)