Tôi muốn xóa các số khỏi một chuỗi:
questionText = "1 ding ?"
Tôi muốn thay thế số 1
thứ tự và dấu chấm hỏi ?
. Nó có thể là bất kỳ số nào. Tôi đã thử mã không hoạt động sau đây.
questionText.replace(/[0-9]/g, '');
Tôi muốn xóa các số khỏi một chuỗi:
questionText = "1 ding ?"
Tôi muốn thay thế số 1
thứ tự và dấu chấm hỏi ?
. Nó có thể là bất kỳ số nào. Tôi đã thử mã không hoạt động sau đây.
questionText.replace(/[0-9]/g, '');
Câu trả lời:
Rất gần, hãy thử:
questionText = questionText.replace(/[0-9]/g, '');
replace
không hoạt động trên chuỗi hiện có, nó trả về một chuỗi mới. Nếu bạn muốn sử dụng nó, bạn cần phải giữ nó!
Tương tự, bạn có thể sử dụng một biến mới:
var withNoDigits = questionText.replace(/[0-9]/g, '');
Một thủ thuật cuối cùng để xóa toàn bộ khối chữ số cùng một lúc, nhưng mẹo đó có thể đi quá xa:
questionText = questionText.replace(/\d+/g, '');
\?,\*
, nhưng bạn có thể muốn /[?*]/g
. Hãy đặt câu hỏi mới khi bạn có!
Chuỗi là bất biến , đó là lý do tại sao questionText.replace(/[0-9]/g, '');
tự nó hoạt động, nhưng nó không thay đổi câu hỏiText-string. Bạn sẽ phải gán kết quả của sự thay thế cho một biến String khác hoặc cho chính questionText một lần nữa.
var cleanedQuestionText = questionText.replace(/[0-9]/g, '');
hoặc trong 1 lần (sử dụng \d+
, xem câu trả lời của Kobi):
questionText = ("1 ding ?").replace(/\d+/g,'');
và nếu bạn muốn cắt bớt (các) khoảng trắng ở đầu (và ở cuối) khi bạn đang ở đó:
questionText = ("1 ding ?").replace(/\d+|^\s+|\s+$/g,'');
/g
trên tất cả các regexes - JavaScript là gây phiền nhiễu như vậy:)
Bạn rất gần gũi.
Đây là mã bạn đã viết trong câu hỏi:
questionText.replace(/[0-9]/g, '');
Đoạn mã bạn đã viết thực sự nhìn vào biến questionText và tạo ra kết quả là chuỗi ban đầu, nhưng với các chữ số được thay thế bằng chuỗi trống.
Tuy nhiên, nó không tự động gán nó trở lại biến ban đầu. Bạn cần chỉ định những gì để gán nó cho:
questionText = questionText.replace(/[0-9]/g, '');
Chỉ muốn thêm vì nó có thể được ai đó quan tâm, nên bạn cũng có thể nghĩ về vấn đề theo cách khác. Tôi không chắc liệu điều đó có được quan tâm ở đây hay không, nhưng tôi thấy nó có liên quan.
Ý tôi theo cách khác là nói "tước bất cứ thứ gì không phải là thứ tôi đang tìm kiếm, tức là nếu bạn chỉ muốn 'ding', bạn có thể nói:
var StrikeText = ("1 ding?"). Replace (/ [^ a-zA-Z] / g, '');
Về cơ bản có nghĩa là "loại bỏ bất kỳ thứ gì là nog a, b, c, d .... Z (bất kỳ chữ cái nào).
Một tùy chọn phụ sẽ là đối sánh và trả về không phải chữ số với một số biểu thức tương tự như,
/\D+/g
mà có thể sẽ hoạt động cho chuỗi cụ thể đó trong câu hỏi ( 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));
Nếu bạn muốn đơn giản hóa / sửa đổi / khám phá biểu thức, nó sẽ được giải thích ở bảng trên cùng bên phải của regex101.com . Nếu muốn, bạn cũng có thể xem trong liên kết này , nó sẽ khớp như thế nào với một số đầu vào mẫu.
jex.im trực quan hóa các biểu thức chính quy:
Điều này có thể được thực hiện mà không regex
có hiệu quả hơn:
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);
Và như một phần thưởng, nó cũng lưu trữ số, có thể hữu ích cho một số người.
Bạn có thể sử dụng phương thức .match && join (). .match () trả về một mảng và .join () tạo thành một chuỗi
function digitsBeGone(str){
return str.match(/\D/g).join('')
}