m 옵션은 조금 특이합니다. 우선 예제를 볼까요?
<script>
var s = '123abc\n456abc';
var res = s.match(/b/g);
document.write(res);
</script>
지난회의 마지막 예제를 조금 수정했습니다. 문자열 s에서 중간에 \n만 넣었습니다. 이렇게 되면 s는 두 줄이 됩니다. 그런데 결과를 보면 여전히 ‘b,b’입니다. 검색할 대상이 몇 줄에 걸쳐져 있더라도 다 찾아내는 걸 알 수 있습니다. 그렇다면 m 옵션은 왜 필요한 걸까요? 지난회에서는 m 옵션을 붙일 경우 여러 줄에 걸쳐져 있는 문자나 문자열을 검색해낸다고 단순히 설명드렸는데 실은 각 줄의 시작 부분에 대해서만 의미가 있습니다.
6회와 7회 강좌에서 캐럿(^)에 대한 설명을 드렸습니다. ‘그런 것도 있었나?’ 하시는 분들... 분명 계시겠지요. 해서 간단히 리마인드를 시켜드리면, 문자열의 처음 부분에 대해서만 검색하는 메타문자입니다. 역시 예제죠?
<script>
var s = '123abc\n456abc';
var res = s.match(/456/);
document.write(res);
</script>
위의 예제를 실행하면 ‘456’이 리턴됩니다. 즉 제대로 찾았습니다. 그런데
<script>
var s = '123abc\n456abc';
var res = s.match(/^456/);
document.write(res);
</script>
위의 예제에서는 null이 리턴됩니다. 변수 s에 들어 있는 문자열이 456이 시작하지 않기 때문입니다. 이번에는
<script>
var s = '123abc\n456abc';
var res = s.match(/^456/m);
document.write(res);
</script>
m 옵션을 붙였습니다. 그러자 ‘456’이 리턴됩니다. 정리하면, m 옵션이 없을 때는 여러 줄이건 아니건 주어진 텍스트의 첫 부분과만 매치돼야 합니다. m 옵션이 있으면 첫 줄이건 다른 줄이건 각 줄의 첫 부분과만 매치되면 됩니다.