Я хочу видалити числа з рядка:
questionText = "1 ding ?"
Я хочу замінити 1номер і знак запитання ?. Це може бути будь-яке число. Я спробував наступний неробочий код.
questionText.replace(/[0-9]/g, '');
Я хочу видалити числа з рядка:
questionText = "1 ding ?"
Я хочу замінити 1номер і знак запитання ?. Це може бути будь-яке число. Я спробував наступний неробочий код.
questionText.replace(/[0-9]/g, '');
Відповіді:
Дуже близько, спробуйте:
questionText = questionText.replace(/[0-9]/g, '');
replaceне працює на існуючому рядку, він повертає новий. Якщо ви хочете ним скористатися, вам потрібно його зберегти!
Аналогічним чином ви можете використовувати нову змінну:
var withNoDigits = questionText.replace(/[0-9]/g, '');
Останній фокус, щоб видалити цілі блоки цифр одночасно, але цей може зайти занадто далеко:
questionText = questionText.replace(/\d+/g, '');
\?,\*, уникнути їх , але ти, мабуть, хочеш /[?*]/g. Не соромтеся задавати нове питання, коли воно у вас є!
Рядок є незмінною , тому questionText.replace(/[0-9]/g, '');на його власний робить роботу, але це не змінює questionText-рядки. Вам доведеться призначити результат заміни іншій змінній String або знову задати сам TextText.
var cleanedQuestionText = questionText.replace(/[0-9]/g, '');
або за 1 прийом (використовуючи \d+, див. відповідь Кобі):
questionText = ("1 ding ?").replace(/\d+/g,'');
і якщо ви хочете обрізати провідні (і кінцеві) пробіли, поки ви перебуваєте:
questionText = ("1 ding ?").replace(/\d+|^\s+|\s+$/g,'');
/gпро всі регулярні вирази - JavaScript дратує таким чином:)
Ви надзвичайно близькі.
Ось код, який ви написали у питанні:
questionText.replace(/[0-9]/g, '');
Код, який ви написали, справді розглядає змінну questionText і видає вихідний текст, який є вихідним рядком, але цифри замінені порожнім рядком.
Однак він не призначає його автоматично назад до вихідної змінної. Вам потрібно вказати, до чого його призначати:
questionText = questionText.replace(/[0-9]/g, '');
Просто хочу додати, оскільки це може когось зацікавити, що ви можете подумати про проблему і по-іншому. Я не впевнений, чи це тут цікавить, але я вважаю це доречним.
Що я маю на увазі під іншим способом, це сказати "позбавити все, що не є тим, що я шукаю, тобто якщо ви хочете лише" дзвін ", ви можете сказати:
var strippedText = ("1 дзвін?"). замінити (/ [^ a-zA-Z] / g, '');
Що в основному означає "видалити все, що є a a, b, c, d .... Z (будь-яка буква).
Вторинним варіантом буде збіг та повернення нецифрових цифр із виразом, подібним до,
/\D+/g
що, ймовірно, буде працювати для цього конкретного рядка у питанні ( 1 ding ?).
function non_digit_string(str) {
const regex = /\D+/g;
let m;
non_digit_arr = [];
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
m.forEach((match, groupIndex) => {
if (match.trim() != '') {
non_digit_arr.push(match.trim());
}
});
}
return non_digit_arr;
}
const str = `1 ding ? 124
12 ding ?
123 ding ? 123`;
console.log(non_digit_string(str));
Якщо ви хочете спростити / змінити / дослідити вираз, це було пояснено на верхній правій панелі regex101.com . Якщо ви хочете, ви також можете подивитися за цим посиланням , як це буде відповідати деяким зразкам входів.
jex.im візуалізує регулярні вирази:
Це можна зробити без того, regexщо є більш ефективним:
var questionText = "1 ding ?"
var index = 0;
var num = "";
do
{
num += questionText[index];
} while (questionText[++index] >= "0" && questionText[index] <= "9");
questionText = questionText.substring(num.length);
І як бонус він також зберігає номер, який може бути корисним для деяких людей.
Ви можете використовувати методи .match && join (). .match () повертає масив, а .join () робить рядок
function digitsBeGone(str){
return str.match(/\D/g).join('')
}