대화식 양식을 만들 때 사용자가 제출 한 정규식을 파싱하고 각 정규식에서 일치하는 항목을 찾아 색인을 가져와야합니다 (캡처 그룹이 시작되는 곳).)를 사용하여 원래 문자열을 수정하십시오 (예 : 캡처 주위에 <strong>
태그를 추가한다고 가정 해보십시오).
결국 ip:(.+);port:(\d+)
을 ip:<strong>(.+)</strong>;port:<strong>(\d+)</strong>
으로 수정할 수 있기를 바랍니다.모든 항목을 정규식으로 일치시키고 문자열로 색인을 가져옵니다.
// Called somewhere after user entered every regex he wants
$('input.regex').each(function() {
pattern = $(this).val(); // for non jQuery guys: just returns the content of the input
captures = pattern.match(/(\([^\(\)]+\))/g);
for(idx in captures) {
console.log(captures[idx]);
}
});
이 모든 캡처 그룹을 찾을 날 (하위 그룹을 입력 할 수있는 사용자를 인정 반환 ... 그래 이미 약간의 두통을 줄 수있는 정규식 :
은 현재 내가 코드의이 작은 조각이 - ip:(.+);port:(\d+)
에
- , 밖으로 출력
(.+)
및ip:(?P<sourceip>[\d\.]);port:(\d{2,5})
에(\d+)
- : 나는 몇 가지 예에서 실행하는 경우)) 나는 순간 원하는 것을 얻을 수 덧붙여서
(?P<sourceip>[\d\.])
과(\d{2,5})
이제 각 캡처의 시작 인덱스를 얻는 것이 좋습니다. 나는 indexOf가 있다는 것을 알고 있지만 여러 번 같은 포획을 할 수 있습니다. 예를 들어
id1:(\d+);id2:(\d+)
현재(\d+)
(\d+)
및 출력한다.[{'match': '(\d+)', 'index': 4}, {'match': '(\d+)', 'index': 14}]
: ... 첫 번째 인덱스하지만 두 번째를 쉽게 얻을 수
이 유사한 구조를 얻을 가능성이 있습니까? 일부 문자열 조작으로이 작업을 수행 할 수 있지만 더 단순한 (그리고 더 깨끗한) 방법이 있는지 알고 싶습니다.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec이 한 번 봐 가지고 ['하려면 string.replace을 (, 기능() {...})'(https : //로 개발 .mozilla.org/ko-ko/docs/Web/JavaScript/Reference/Global_Objects/String/replace) –
Andreas
캡쳐 목록을 유지하고 싶습니다. 나는'string.replace'가 이것에 적절하다고 생각하지 않는다 :/ –
@MaximeLorant는 ['string.match (regexp)'] (https://developer.mozilla.org/en-US/docs/)에서 살펴 본다. 웹/JavaScript/Reference/Global_Objects/String/match) –