2016-10-04 2 views
0

상당히 직선적 인 질문 : JS의 정규식에서 일치 그룹에 대해 산술 연산을 수행하는 방법이 있습니까?정규식 그룹 자바 스크립트에 대한 산술 연산

예는 :

내가 5로 나누어 어떤 숫자 200을 대체 할
<img style="top:200"> 

,이 경우 40 것이다 : 나는 문자열을 가지고있다. 그래서 출력 :

var d= c.replace(/top:([-]?\d*[\.]?\d*)/,'int:'+parseInt($1/5)+'px') 

을하지만

<img style="top:NaNpx"> 
+2

왜 HTML과 CSS를 구문 분석하는 정규식을 사용? – adeneo

+0

이 경우 너무 많은 문제점을 나타내지 않아도되는 잘 정의 된 텍스트입니다. 그는 HTML 구문 트리 전체를 파싱하는 것처럼 보이지 않습니다. –

+0

대체 메소드를 사용하여 콜백을 사용합니다. 'var c =' '; var d = c.replace (/ top : ([-]? \ d *) /, function (m, m1) { return 'top :'+ m1/5 + ' px '; });'.....하지만 html을 파싱하기 위해 정규 표현식을 사용하는 것은 좋지 않습니다. –

답변

2

당신은 String#replace 방법 콜백 기능을 사용할 수 있습니다 얻을 :

<img style="top:40"> 

나는 시도했다.


var c = '<img style="top:40">'; 
 

 
var d = c.replace(/top:([-]?\d*[\.]?\d*)/, function(m, m1) { 
 
    return 'top:' + m1/5 + 'px'; 
 
}); 
 

 
console.log(d);
는 참고 :하지만 HTML을 구문 분석 정규식을 사용하는 것은 좋은 생각입니다. 단지 대신 전체 문자열에 적용하는 스타일 속성 값에 대한 대체 방법을 적용 DOMParser


또 다른 방법 .

var c = '<img style="top:200">'; 
 

 
var parser = new DOMParser(); 
 

 
var img = parser.parseFromString(c, "text/html") 
 
    .querySelector('img'); 
 

 
img.setAttribute('style', img.getAttribute('style').replace(/\btop:([-]?\d*(\.\d+)?)/, function(m, m1) { 
 
    return 'top:' + m1/5 + 'px'; 
 
})) 
 

 

 
console.log(img.outerHTML)

+0

5 초 만에 나를 이길 수있어 : P –

+0

@pranav Ik하지만, 나는 레거시 코드 기반으로 작업하고 있는데, 매우 구체적이다. 나는 이것을 스스로 권장하지 않을 것이다. 그러나, 나의 특정한 시나리오를 위해서 이것은 유일한 것이다. 방법!!! –