Я считаю, что ваша цель заключается в следующем.
- Вы хотите преобразовать свой сценарий python в сценарий Google Apps.
Для этого, как насчет этого ответа?
В этом ответе для проверки полного соответствия text
используется регулярное выражение ^(([A-Z]+)\s([0-9]+)\s-\s([0-9]+)x?;\n)+$
. И test
используется для этой ситуации.
Пример сценария 1:
Это тестовый сценарий для полного соответствия.
const text1 = "CS 101 - 18;\nCS 102 - 10;\nCS 104 - 6x;\n";
const res1 = (/^(([A-Z]+)\s([0-9]+)\s-\s([0-9]+)x?;\n)+$/).test(text1);
console.log(res1)
const text2 = "CS 1foo01 - 18;\nCS 102 - 10;\nCS 104 - 6x;\n";
const res2 = (/^(([A-Z]+)\s([0-9]+)\s-\s([0-9]+)x?;\n)+$/).test(text2);
console.log(res2)
- Я думаю, что также можно использовать
^([A-Z]+\s[0-9]+\s-\s[0-9]+x?;\n)+$
.
Пример сценария 2:
Когда ваш python скрипт конвертируется в Google Apps Script, он становится следующим:
function is_valid(text, valid_styles) {
const good_string_found = (/^(([A-Z]+)\s([0-9]+)\s-\s([0-9]+)x?;\n)+$/).test(text);
if (!good_string_found) return [false, 1];
let items = text.split(";\n");
items.pop();
for (let i = 0; i < items.length; i++) {
const each_item = items[i];
const [style_number, size] = [each_item.split(" - ")[0], each_item.split(" - ")[1]];
const valid_sizes = ["4","5","6","6x","7","8","10","12","14","16"];
if (!valid_styles.includes(style_number) || !valid_sizes.includes(size)) {
console.log("First error found in: " + style_number + " - " + size);
return [false, 2];
}
}
return [true, 0];
}
// Please run this function.
function main() {
const user_entry = "CS 101 - 18;\nCS 102 - 10;\nCS 104 - 6x;\n";
const valid_style_numbers = ["CS 101", "CS 102", "CS 103", "CS 104"];
const [validity, error] = is_valid(user_entry, valid_style_numbers);
if (!validity && error == 1) {
console.log("User entered string did not:\n- Match regex expected input");
} else if (!validity && error == 2) {
console.log("User entered string did not:\n- Contain a valid style number\n- Contain a valid size")
} else if (validity) {
console.log("Proper scan")
}
}
Ссылка: