예제 입력에서 실행하려는 다음 정규 표현식을 사용하여 숫자와 분수를 모두 바꿉니다 (숫자를 곱해야합니다.)을 선택합니다 다음 numbersRegex 숫자 만 포함 된 라인에서 실행하는 데 필요한분수를 분수로 대체 정규 표현식, 숫자가 숫자 정규 표현식
numbersRegex = /[0-9]+(?:\.[0-9]*)?/g;
fractionsRegex = /((\d+)\/(\d+))/g;
을 (내가) numbersRegex를 사용하여 아래의 예를 입력에서 그들을 표시했다.
fractionsRegex는 분수 만 포함 된 줄에서 실행해야합니다 (fractionsRegex를 사용하여 밑줄 입력 예제에 표시했습니다).
곱셈 방법이 서로 다른 두 가지가 필요합니다. 그래서 str.replace를 두 번 실행합니다. 하나는 모든 분수를 곱하고 다른 하나는 모든 수를 곱합니다.
1 1/2 oz. white rum (fractionsRegex)
1/2 lime, cut in 4 wedges (fractionsRegex)
10 mint leaves, fresh (numbersRegex)
2 tbsp. white sugar (numbersRegex)
1 cup ice cubes (numbersRegex)
1/2 cup club soda (fractionsRegex)
가 가능한가 : 여기
는 예컨대 입력?많은 감사
UPDATE
이 내가 현재 (이 정리 될 필요가 나는 그것은 또한 최적화 할 수 있습니다 확신) 사용하고 기능입니다 :
function _increaseServings(target, initialServings, newServings) {
target.html(originalIngredientsHTML);
target.find('li').each(function(i) {
var currentLine = $(this).text();
var importantPart = currentLine.split(',');
var fractionsRegex = importantPart[0].match(/((\d+)\/(\d+))/g);
var lineHiddenFractions = importantPart[0] != null ? importantPart[0].replace(/([0-9]{1,})([\/]{1})([0-9]{1,})/g, "") : "";
var numbersRegex = lineHiddenFractions.match(/([0-9]+(?:\.[0-9]*)?)/g);
var result = {};
var strToReplace = '';
if (fractionsRegex == null && numbersRegex == null) return;
if (fractionsRegex !== null && fractionsRegex.length > 0) {
result.fraction = fractionsRegex[0];
strToReplace = result.fraction;
}
if (numbersRegex !== null && numbersRegex.length > 0) {
result.number = parseInt(numbersRegex[0]);
if(result.fraction) {
strToReplace = result.number + ' ' + strToReplace;
} else {
strToReplace = result.number;
}
}
if(result.fraction) {
var fraction = result.fraction.split('/');
if(result.number && result.fraction) {
result.decimal = parseInt(result.number) + parseInt(fraction[0])/parseInt(fraction[1]);
} else {
result.decimal = parseInt(fraction[0])/parseInt(fraction[1]);
}
} else {
result.decimal = parseInt(result.number);
}
result.stringToReplace = strToReplace;
var newValue = result.decimal * (newServings/initialServings);
if(newValue % 1 != 0) {
var values = String(newValue).split('.');
var checkValue = String(values[1]).slice(0,1);
var integerPart = Math.floor(newValue);
if(checkValue == 2) {
// 25
newValue = integerPart + ' 1/4';
} else if(checkValue == 3) {
// 33
newValue = integerPart + ' 1/3';
} else if(checkValue == 5) {
// 50
newValue = integerPart + ' 1/2';
} else if(checkValue == 6) {
// 66
newValue = integerPart + ' 2/3';
} else if(checkValue == 7) {
// 75
newValue = integerPart + ' 3/4';
}
if(integerPart == 0) newValue = newValue.slice(2, newValue.length);
}
currentLine = currentLine.replace(strToReplace, newValue);
$(this).text(currentLine);
});
}
귀하의 질문을 이해할 수 있는지 확실하지 않습니다. 분수 라인에서 분수를 추출하고 분수없이 라인에서 숫자를 추출하는 ** 1 ** 정규식을 원하십니까? –
나는 당신의 질문을 정말로 얻지 못한다. 문자열에 분수 또는 숫자가 포함되어 있는지 여부를 결정하여 사용하려는 정규식을 결정하십시오. 그렇다면 문자열에 분수가 들어 있는지 먼저 정규식 분수로 테스트하십시오. 테스트가 실패하면 숫자 regexp를 사용하십시오. 도움이되지 않는 경우 질문을 명확히하십시오. :) – tleilax
더 좋은 설명을 위해 편집했습니다. –