替换 |
interpolate | sub | scan | truncate | gsub |
interpolate: 文字列をテンプレートとして扱い、オブジェクトのプロパティを入力します。
sub: pattern で指定されたパターンに一致する文字列内の最初に指定された部分文字列を置換します。
scan: パラメーター pattern で指定されたパターンに一致する文字列内のすべての部分文字列をスキャンします。元の文字列そのものを返します。
truncate: 文字列を指定された長さ (サフィックス部分を含む) で切り詰め、サフィックスを追加します。
gsub: pattern で指定されたパターンに一致する文字列内のすべての値を置換
に置き換えます。 上記のメソッドのうち、最も重要なものは gsub です。詳細な手順については、「gsub の簡単な分析」を参照してください。 Prototype」テンプレートクラス--Template》
sub は、回数を制限できる点を除けば gsub と全く同じです。
関数 sub(パターン、置換、カウント) {
replacement = prepareReplacement(replacement);
count = Object.isUnknown(count) ? 1 : count;
return this.gsub(pattern, function(match) {
if (--count)
scan は同じですが、最後に返されるのは文字列自体。
interpolate は文字列をテンプレートとして使用します。コアは依然として gsub です。唯一の違いは
truncate です (今では、間違ったカテゴリに分類したと漠然と感じています)。
文字列 'fuck the gfw' を例にとると、truncate で 'fuck the gfw'.truncate(10,'****') を実行する手順は次のとおりです:
1. 最初の 10 を取得します。 '** **'.length 文字 'fuck t'
2. サフィックス '****' を追加して 'fuck t****' を取得します。長さは 10 です。
この処理は非常に複雑です。シンプルで、ソースコードもシンプルです:
コードをコピー
コードは次のとおりです: function truncate(length, truncation) {
length = length || デフォルトの長さ 30
truncate = Object.isUnknown(truncation) : truncation;// デフォルトのサフィックス.
return this.length > length ?
this.slice(0, length - truncation.length) truncation :
もう 1 つ: プロトタイプの便利さの 1 つは、いつでも有用なコードを別のセクションとして抽出したり、自分用に収集したりできることです。以下に別途提案されているテンプレートメソッドを示します。
コードをコピー
コードは次のとおりです。 function Template(template, pattern){ this .template = テンプレート;
this.pattern = パターン || /(^|.|r|n)(#{(.*?)})/;
}
Template.prototype = (function (){
function Evaluate(obj){
return gsub.call(this,function(match){
if(obj == null){
return match[0] ' ';
}
var before = match[1] ||
if(before == '\'){
return match[2]; var ctx = obj;
var expr = match[3];
var pattern = /^([^.[] |[((?:.*?[^\])?)](. |[| $)/;
match = pattern.exec(expr);
if (match == null){
while (match != null) {
var comp = match[1].search(/^[/) != -1 ? match[2].replace(/\\]/g, ']') : match[1]; >ctx = ctx[comp];
if (null == ctx || '' == match[3]) Break;
expr = expr.substring('[' == match[3] ? match [1] .length : match[0].length);
match = pattern.exec(expr);
}
return before (ctx === null ? '' : String(ctx)) ;
});
関数 gsub(replacement){
var 結果 = ''; var source = this.template;
if (!(pattern.length || pattern.source)) {
replacement = replace('');
return replacesource.split('').join (置換) 置換;
}
while (source.length > 0) {
if (match = source.match(pattern)) {
result = source.slice(0, match.インデックス);
結果 = replace(match) === null ? '' : String(replacement(match));
source = source.slice(match.index match[0].length); >}else {
result = ソース;
source = '';
}
return {
コンストラクター、
評価 :
}
})();
コードをコピー
コードは次のとおりです:
var template = new Template('my age is : #{name.age}');
console.log(template.evaluate({name : {age}) : 24}})) ;//私の年齢は : 24
文字列部分 (終わり)