[자바 스크립트] 문자열에서 2 개의 정수를 찾아 자바 스크립트로 바꾸는 방법
이 메서드는
원래 문자열
을 유지 하여 숫자를 편집 할 수 있습니다.
http://jsfiddle.net/cgVgq/
str = "Total time: 3 hours and 15 minutes";
//get all groups of numbers and non-numbers
var matches = str.match(/([\d]+|[^\d]+)/g);
//assumes there will be exactly two distinct numbers
matches[1] = parseFloat(matches[1]) + 42;
matches[3] = parseFloat(matches[3]) + 42;
//replace the string
str = matches.join("") //"Total time: 45 hours and 57 minutes"
-------------------
var str = 'Total time: 3 hours and 15 minutes';
var matches = str.match(/\d+/g);
var number1 = Number(matches[0]);
var number2 = Number(matches[1]);
str = str.replace(number1, '11').replace(number2, '22');
alert(str);
-------------------
시간과 분을 얻으려면 이것을 시도하십시오
var pattern = /\d+/g;
var str = "Total time: 3 hours and 15 minutes";
var matches = str.match(pattern);
var hours = matches[0]; // will be 3
var minutes = matches[1]; // will be 15
-------------------
아래와 같이 문자열을 업데이트하는 함수를 만들 수 있습니다.
var generateStr = function(hour, minute) {
return 'Total Time: ' + hour + ' hours and ' + minute + ' minutes'
}
-------------------
다음을 시도 할 수 있습니다 .--
var regex = /\d+/g;
var str = "Total time: 3 hours and 15 minutes";
var numbers = str.match(regex);
var hours = numbers[0];
var minutes = numbers[1];
alert(hours);
alert(minutes);
-------------------
var s = "Total time: 3 hours and 15 minutes";
var r = /(.*?)(\d+)(.*?)(\d+)(.*?)/g;
var m = r.exec(s);
var hh = parseInt(m[2], 10);
var mm = parseInt(m[4], 10);
hh = hh + 1;
mm = mm + 1;
s = s.replace(r, "$1" + hh + "$3" + mm + "$5");
-------------------
다음과 같이 캡처하는 정규식 그룹을 사용하십시오.
var inputStr = 'Total time: 3 hours and 15 minutes';
var newHours = 4;
var newMinutes = 30;
var outputStr = inputStr.replace(/(^.*?)(\d+)(.*?)(\d+)/,
'$1' + newHours + '$3' + newMinutes);
지금
outputStr
은 '총 시간 : 4 시간 30 분'입니다.
편집하다
다음을 수행 할 수도 있습니다.
var inputStr = 'Total time: 3 hours and 15 minutes';
var outputStr = inputStr.replace(/(^.*?)(\d+)(.*?)(\d+)/,
function(match, p1, p2, p3, p4){
p2 = parseInt(p2, 10) + 1;
p4 = parseInt(p4, 10) + 10;
return p1 + p2 + p3 + p4;
});
이제 outputStr은 "총 시간 : 4 시간 25 분"이됩니다.-------------------
"최고"는 무엇입니까? 정확히 무엇을하고 있고 "최고"를 어떻게 정의 하느냐에 따라 대답 할 수있는 정보가 너무 적습니다.이를 달성하는 방법에는 여러 가지가 있습니다. 당신이 무엇을 시도했는지 또는 무엇에 문제가 있는지 모르고, 당신은 우리에게 말하지 않았습니다.그러나 몇 가지 가능성.자바 스크립트
var str = 'Total time: 3 hours and 15 minutes',
arr = str.split(/(\d+)/),
addHours = 5,
addMinutes = 30,
result,
idx;
arr[1] = +(arr[1]) + addHours;
arr[3] = +(arr[3]) + addMinutes;
result = arr.join('');
console.log(result);
idx = 0;
result = str.replace(/(\d+)/g, function (match, p1, offset, string) {
idx += 1;
if (idx === 1) {
return +(p1) + addHours;
}
return +(p1) + addMinutes;
});
console.log(result);
result = str.match(/^(.*?)(\d+)(.*?)(\d+)(.*?)$/).slice(1).reduce(function (acc, cur, index) {
if (index === 1) {
acc += +(cur) + addHours;
} else if (index === 3) {
acc += +(cur) + addMinutes;
} else {
acc += cur;
}
return acc;
}, '');
console.log(result);
에
jsFiddle
모두 동일한 결과를 생성합니다.-------------------
원래 문자열을 기반으로 재사용 가능한 함수를 만듭니다.
<div id="time">Total time: 3 hours and 15 minutes</div>
var el = document.getElementById('time');
var refresh = new Function('return [' + (
el.innerHTML.replace(/'/g, '\\\'').replace(
/^(\D+)\d+(\D+)\d+(.+)$/,
'\'$1\',this[0],\'$2\',this[1],\'$3\''
)
) + '].join(\'\');');
사용 예 :
el.innerHTML = refresh.call([1, 2]); // "Total time: 1 hours and 2 minutes"
el.innerHTML = refresh.call([3, 4]); // "Total time: 3 hours and 4 minutes"
배열이 마음에 들지 않으면 :
var refresh = new Function('return [' + (
el.innerHTML.replace(/'/g, '\\\'').replace(
/^(\D+)\d+(\D+)\d+(.+)$/,
'\'$1\',this.hours,\'$2\',this.minutes,\'$3\''
)
) + '].join(\'\');');
사용 예 :
el.innerHTML = refresh.call({ hours: 1, minutes: 2 });
el.innerHTML = refresh.call({ hours: 3, minutes: 4 });
마음에 들지 않는 경우
.call()
:
var refresh = new Function('time', 'return [' + (
el.innerHTML.replace(/'/g, '\\\'').replace(
/^(\D+)\d+(\D+)\d+(.+)$/,
'\'$1\',time.hours,\'$2\',time.minutes,\'$3\''
)
) + '].join(\'\');');
사용 예 :
el.innerHTML = refresh({ hours: 1, minutes: 2 });
el.innerHTML = refresh({ hours: 3, minutes: 4 });
더 나아가
데모 :
http://jsfiddle.net/wared/W4Xx8/
.
<div id="time">Total time: 3 hours and 15 minutes</div>
var refreshTime = function () {
var el = document.getElementById('time');
var tpl = new Function('return [' + (
el.innerHTML.replace(/'/g, '\\\'').replace(
/^(\D+)\d+(\D+)\d+(.+)$/,
'\'$1\',this.hours,\'$2\',this.minutes,\'$3\''
)
) + '].join(\'\');');
return function (data) {
el.innerHTML = tpl.call(data);
};
}();
refreshTime({ hours: 1, minutes: 2 });
출처
https://stackoverflow.com/questions/22006876