본문 바로가기

JavaScript/SonarQube

[SonarQube][Bug] Group parts of the regex together to make the intended operator precedence explicit.

반응형
Alternatives in regular expressions should be grouped when used with anchors
앵커와 함께 사용할 경우 정규 표현식의 대안(alternatives)을 그룹화해야 합니다

 

 

정규식에서 앵커 ^와 $는 | 연산자보다 높은 우선 순위를 갖습니다. 따라서 ^alt1|alt2|alt3$와 같은 정규식에서 alt1은 맨 앞에 고정되고 alt3은 맨 끝에 고정되지만 alt2는 고정되지 않습니다. 일반적으로 의도된 동작은 모든 대안(alternatives)들이 양쪽 끝에 고정되는 것입니다. 이를 위해서는 대안에 non-capturing group을 사용해야 합니다.

 

앵커가 각각 하나의 대안에만 적용되도록 의도된 경우 앵커와 적용되는 부분 주위에 non-capturing group을 추가하면 어떤 부분이 고정되어 있는지 명확하게 만들고 독자가 우선 순위를 오해하거나 변경하는 것을 방지할 수 있습니다. 왜냐하면 그들은 우선순위가 의도되지 않았다고 잘못 가정하기 때문입니다.

 

 

Noncompliant Code Example

^a|b|c$

 

Compliant Solution

^(?:a|b|c)$
^a$|^b$|^c$
// 앵커를 각각 a와 c에만 적용하려는 경우
(?:^a)|b|(?:c$)

 

반응형