값을 조회 데이터베이스에서 그들의 값. 가장 빠른 방법입니다. 따라서 배열을 조회하여 문자열에서 값을 다시 바꿀 수 있습니다.문자열에서 요소의 배열을 가져 오기와 같은 데이터베이스에서 내가 계산 문자열이
은 내가 생각했습니다
- For loop, looking for { then finding the next }
- Split with a map
- IndexOf
값을 조회 데이터베이스에서 그들의 값. 가장 빠른 방법입니다. 따라서 배열을 조회하여 문자열에서 값을 다시 바꿀 수 있습니다.문자열에서 요소의 배열을 가져 오기와 같은 데이터베이스에서 내가 계산 문자열이
은 내가 생각했습니다
- For loop, looking for { then finding the next }
- Split with a map
- IndexOf
정규식
var exp = /{([^}]+)}/g ,index;
while(index = exp.exec("{a}+{b}==2")) {
console.log(index[1]);
}
사용. Demo
"가장 빠른"방법인지는 확실하지 않지만 정규식 사용을 고려해야합니다. 같은
뭔가 :
var calc = "{a}+{b}==2";
var re = /{([^}]+)}/g;
var res;
var result = [];
while (res = re.exec(calc))
{
result.push(res[1]);
}
console.log(result);
귀하의 정규식 필요할 수는 {} 표현의 실제 정의를 기반으로 정제 할 (허용되는 문자, 인용 등 기준).
다시 값을 받으면 replace
을 사용하여 값을 바꿀 수 있습니다.
var values = {a: 1, b: 3};
var replaced = calc.replace(re,function(match,name) { return values[name]; });
console.log(replaced);
NB : 수 당신이 다음 eval
등이를 보낼 계획이라면 매우주의.
정규식은 마음에 먼저 오지만 O (n) 시간에이 작업을 구현하는 다른 방법은있을 수 있습니다.
function getDatas(s){
var dataOn = false;
return Array.prototype.reduce.call(s,(d,c) => dataOn ? c !== "}" ? (d[d.length-1] += c,d)
: (dataOn = false, d)
: c === "{" ? (dataOn = true, d.push(""),d)
: d, []);
}
var calc = "{a}+{b}+{colorSpace}==2",
result = getDatas(calc);
console.log(result);
indexOf
또는
for
루프와 같은 다른 아이디어로 테스트를 연장 할 수 있습니다.
제대로 이해했다면 교체해야합니다. regex를 사용하여 각 변수를 찾고 값으로 바꿉니다. – Whothehellisthat
정규식을 사용하는 것은 어떻습니까? –
감사합니다. 많은 옵션이 있다는 것을 알고 있습니다. 나는 가장 효과적이고 가장 빠른 예제를 기대했다 – Wayneio