정규식을 더 잘하는 사람이 도움을 줄 수 있다면 크게 감사하겠습니다. 스크립트 태그 내에서 모든 HTML JavaScript 주석을 찾기 위해 다음 정규식(URL 참조)을 얻으려고 합니다. 필요한 작업에 대해 Windows PowerShell을 사용하여 실행됩니다.
아래 예는 내가 지금까지 가지고 있는 것입니다. 그러나 여전히 다음을 수행하지 않습니다.
(?s)(?(?=\A).*?<script[^>]*>).*?(?:\K\/\/|<\/script>.*?(?:<script[^>]*>|\z)(*SKIP)(*FAIL))
7가지 테스트 시나리오가 포함된 예시 URL: https://regex101.com/r/YpCJXM/1
목표: 각 시나리오에서 스크립트 태그 외부의 추가 영역을 포함하지 않으면서 주석 텍스트를 강조 표시할 수 있는 경우. regex101에서 작동하는 한 PS에서 작동하게 할 수 있습니다!
편집: 나는 이것을 정규식으로 구문 분석해서는 안된다는 것을 완전히 알고 있습니다! 그러나 정규식에 더 숙련된 사람이 이 작업에 필요한 몇 가지 시나리오를 완료하는 것만으로 쉽게 처리할 수 있다고 확신합니다.
Edit_2: 아래는 또 다른 예입니다. 그러나 여전히 다음을 수행하지 않습니다.
(\/\*[\s\S]*?\*\/|([^:]|^)\/\/.*)
답변: 아래는 http 또는 https를 모두 허용하도록 MikeM의 답변을 약간 변경한 것입니다.
(?si)(?<!http:|https:)\/\/[^\r\n]*(?=(?:(?!<script[^>]*>).)*<\/script>)
다음은 완벽하지는 않지만 테스트를 통과합니다.
(?si)(?<!https:)\/\/[^\r\n]*(?=(?:(?!<script[^>]*>).)*<\/script>)
긍정적인 lookahead는 닫는 스크립트 태그가 여는 스크립트 태그보다 앞에 오고 문자열에서 앞에 오도록 합니다.
사용 예:
$pattern = '(?si)(?<!https?:)\/\/[^\r\n]*(?=(?:(?!<script[^>]*>).)*<\/script>)'
$results = $data | Select-String $pattern -AllMatches
$results.Matches.Value
// find this comment here
//find this comment here
//find this comment here
// find this comment here
// find this comment here
//find this comment here
// find this comment here
//find this comment here
//find this comment here with this included also!
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다