После JavaScript function to convert UTF8 string between fullwidth and halfwidth forms, на этот раз я хочу заменить только часть строки.Функция Javascript для преобразования подстроки UTF8
Я думаю, что нашел все ответы, которые я хочу (из предыдущего сообщения и Replace substring in string with range in JavaScript), но я просто не могу собрать все это вместе. Пожалуйста, обратите внимание на следующие демонстрации:
// Extend the string object to add a new method convert
String.prototype.convert = function() {
return this.replace( /[\uff01-\uff5e]/g,
function(ch) { return String.fromCharCode(ch.charCodeAt(0) - 0xfee0); }
)
};
// Test and verify it's working well:
> instr = "!abc ABC!!abc ABC!"
"!abc ABC!!abc ABC!"
> instr.substr(5, 4)
"ABC!"
> instr.substr(5, 4).convert()
"ABC!"
// Great!
// Goal: define a decode method like this
String.prototype.decode = function(start, length) {
return this.replace(
new RegExp("^(.{" + start + "})(.{" + length + "})"), "$1" + "$2".convert());
};
// Test/verify failed:
> instr.decode(5, 4)
"!abc ABC!!abc ABC!"
// That failed, now define a test method to verify
String.prototype.decode = function(start, length) {
return this.replace(
new RegExp("^(.{" + start + "})(.{" + length + "})"), "$2".length);
};
> instr.decode(5, 4)
"2!abc ABC!"
есть, я считаю, что все мои струнные простирающийся методы определены правильно (в глазах тех, кто не знает JavaScript несколько дней назад). Но когда их объединяют, они не работают, как я ожидал (!abc ABC!!abc ABC!
).
Далее последний тест, один тест с "$2".length
, я просто не могу понять, почему "$2".length
является 2
, но не 4
.
Пожалуйста, помогите мне.
Большое спасибо.
«$ 2» .Length оценивается до замены, поэтому это 2. – bfavaretto
А, вот почему. thx – xpt