카테고리 없음

[자바 스크립트] 문자열에서 2 개의 정수를 찾아 자바 스크립트로 바꾸는 방법

행복을전해요 2021. 1. 16. 05:40

이 메서드는

원래 문자열

유지 하여 숫자를 편집 할 수 있습니다.

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