플래그는 아래와 같은 종류가 있다.
i | Ignore Case | 대소문자를 구별하지 않고 검색한다. |
g | Global | 문자열 내의 모든 패턴을 검색한다. |
m | Multi Line | 문자열의 행이 바뀌더라도 검색을 계속한다. |
숫자를 누르면 값을 추출하는 것은 curPage = $(this).text(); 로 해결된다.
▷ 의 값을 추출하는 것은 인접값 + 1 로 추출하면 된다.
curPage=parseInt($(this).prev().text()) + 1;
하지만 맨 마지막 페이지(▶)의 값을 추출하는 것은 위와 같은 방법으로는 해결이 되지 않는다.
PHP 와 연동된 html 소스보기를 해서 보면
<a class="page-link" href="Customer.php?p=206&m=list">7969</a>
와 같다.
그래서 curPage=$(this).find('a.page-link').attr('href').replace(/[^0-9]/g,''); 로 코드를 구현했다.
검색어를 넣지 않았을 때는 문제가 없는데, 검색어를 넣으면
<a class="page-link" href="Customer.php?p=206&m=list&where=name&keyword=%EC%9D%B4%EC%95%A4%EC%94%A8">206</a>
keyword 에 포함된 숫자값을 몽땅 다 반환하여 원하는 206의 값이 아니라 완전 엉뚱한 값을 반환하더라.
원하는 값을 추출하기 위해서는 필요한 값 주위를 먼저 제거하는 방식으로 처리했다.
https://regexr.com/ 사이트에서 내가 원하는 정규표현식 값이 추출되는지 확인한다.
후방탐색 정규표현식을 사용하여 원하는 값을 찾아낸다.
(?<=ABC) → 후방탐색(Positive lookbehind) : 해당 문자열(ABC)을 기준으로 뒷부분을 찾는다.
/(?<=\&m\=).+/g 를 하면 &m= 뒷부분을 전부 찾아준다.
curPage=$(this).find('a.page-link').attr('href').replace(/(?<=\&m\=).+/g,'');
로 해서 뒷부분 코드를 제거한다.
전방탐색 정규표현식 (?=ABC) 을 사용하여 앞부분 문자열을 제거한다.
/.+(?=\?p\=)/g
curPage=$(this).find('a.page-link').attr('href').replace(/(?<=\&m\=).+/g,'').replace(/.+(?=\?p\=)/g,'');
이렇게 하면 Customer2.php 라고 앞부분에 숫자가 들어가도 문제가 되지 않는다.
이제 마지막으로 숫자만 남기고 제거를 한다.
curPage=$(this).find('a.page-link').attr('href').replace(/(?<=\&m\=).+/g,'').replace(/.+(?=\?p\=)/g,'').replace(/[^0-9]/g,'');
전방탐색 및 후방탐색을 한꺼번에 사용해서 원하는 문자열만 추출해보자.
exec 메소드에서 반환하는 값은 일치하는 문자열의 배열이고 이 배열의 첫 번째 원소는 패턴에 일치하는 문자열이 된다.
curPage=/(?<=\?p\=)(.+)(?=\&m\=)/.exec($(this).find('a.page-link').attr('href'))[0];
로 하면 간단하게 해결이 된다.
iOS 에서 문제가 발생하더라. Android 와 PC 크롬브라우저에서는 아무런 문제가 없다.
iOS에서 게시글 내용 출력 자체가 안되는 현상이 발생했다. 원인 파악하기 힘들어 엄청난 삽질 후, iOS Javascript는 전방탐색 기능만 지원하고 후방탐색 기능은 전혀 지원하지 못하더라.
curPage=$(this).find('a.page-link').attr('href').replace(/.+(?=\?p\=)/g,'').replace(/\D+(?=&m=)/g,'').replace(/[^0-9]/g,'');
또는
curPage=$(this).find('a.page-link').attr('href').match(/\d+(?=&m=)/g);
로 해결했다.
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
const htmlString = $.trim($('.act').html());
console.log(htmlString);
const shref = $('.act').find('a.page-link').attr('href');
console.log(shref);
// exec 메소드에서 반환하는 값은 일치하는 문자열의 배열이고 이 배열의 첫 번째 원소는 패턴에 일치하는 문자열이 된다.
// 전방탐색과 후방탐색을 동시에 적용하여 원하는 문자열만 추출한다.
const hvar = /(?<=\?p\=)([\d]+)(?=\&m\=)/.exec($('.act').find('a.page-link').attr('href'))[0];
console.log(hvar);
// 전방탐색을 하면서 원하는 결과를 얻는다.
const curPage = $('.act').find('a.page-link').attr('href').match(/\d+(?=&m=)/g);
console.log(curPage);
// 천단위 콤마찍기
const a = "10000000";
const b = a.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
console.log(b); // 10,000,000
const stringVal = '2021-08-09';
console.log(stringVal.replace(/-/gi,'')); //결과 : 20210809
// slice ( 시작 문자열 순서, 문자열 갯수)
console.log(stringVal.slice(0,2)); // 결과 : 20
// 시작 문자열 순서만 넣으면, 시작 문자부터 끝 문자까지 문자 반환
console.log(stringVal.slice(2)); // 결과 : 21-08-09
// 시작 문자열 순서를 0보다 작게 넣으면, 문자의 끝에서 파라미터 만큼 앞으로 돌아가서 끝문자까지 반환
console.log(stringVal.slice(-2)); // 결과 : 09
// 이메일 형식에 맞는지 검사한다.
const email = 'jsk005.charlie@gmail.com';
const regexr = /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/;
console.log(regexr.test(email)); // true
});
</script>
</head>
<body>
<div id="paging">
<ul class="pagination">
<li class="page-item">
<a class="page-link" href="Customer.php?p=1&m=list&where=name&keyword=%EC%9D%B4%EC%95%A4%EC%94%A8&">1</a>
</li>
<li class="page-item">
<a class="page-link" href="Customer.php?p=2&m=list&where=name&keyword=%EC%9D%B4%EC%95%A4%EC%94%A8&">2</a>
</li>
<li class="page-item">
<a class="page-link" href="Customer.php?p=3&m=list&where=name&keyword=%EC%9D%B4%EC%95%A4%EC%94%A8&">3</a>
</li>
<li class="page-item">
<a class="page-link" href="Customer.php?p=4&m=list&where=name&keyword=%EC%9D%B4%EC%95%A4%EC%94%A8&">4</a>
</li>
<li class="page-item">
<a class="page-link" href="Customer.php?p=5&m=list&where=name&keyword=%EC%9D%B4%EC%95%A4%EC%94%A8&">5</a>
</li>
<li class="page-item">
<a class="page-link" href="Customer.php?p=11&m=list&where=name&keyword=%EC%9D%B4%EC%95%A4%EC%94%A8&">▷</a>
</li>
<li class="act">
<a class="page-link" href="Customer.php?p=206&m=list&where=name&keyword=%EC%9D%B4%EC%95%A4%EC%94%A8&"><span style="color:red;">▶</span></a>
</li>
</ul>
</div>
</body>
</html>
|
'정규표현식' 카테고리의 다른 글
PHP 정규표현식 문자열 추출 (0) | 2022.03.04 |
---|---|
Python 정규표현식 예제 (0) | 2022.02.06 |
parse MAC Address using Java Regular Expression (0) | 2021.08.07 |
PHP 정규표현식 후방탐색, 전방탐색 (0) | 2021.07.28 |
폰번호, 아이디, 이메일, 성명 등 마스킹처리 (PHP 정규표현식) (0) | 2021.07.28 |