数字入力と分数入力の両方を置き換えるために、次の正規表現を実行したいと思います。 )を選択します:分数を端数で置き換えます。正規表現、数字で数字を正規表現
numbersRegex = /[0-9]+(?:\.[0-9]*)?/g;
fractionsRegex = /((\d+)\/(\d+))/g;
numbersRegexは数字のみを含む行上で実行する必要があります(私はnumbersRegexを使用して下の例の入力でそれらをマーク)。
fractionsRegexは、分数だけを含む行で実行する必要があります(fractionsRegexを使用して下の例の入力でそれらをマークしました)。
私は乗算方法が異なるので2つの異なるものにする必要があるので、str.replaceを2回実行します.1回はすべての分数を掛け、もう1回はすべての数を掛けます。ここで
は、例えば、入力された:
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
私は、より良い説明のために質問を編集しました –