2

次の文では、$ {会議名}をABCに、${会議日}を月曜日に置き換える必要があります。誰かが正規表現を手伝ってくれませんか。

var text = "<td>${conference name}</td><td>${conference day}</td>"

var list = ["${conferance name}", "${conference day}" ]

for (var j = 1; j < list.length; j++) {
            //Extracting the col name
            var colName  =   list[j].split("${");
            colName = colName.split("}")[0];
            //Replacing the col name
            text = text.replace(new RegExp('\\$\\{' + colName + '\\}', 'g'), "ABC");

        }

上記のコードは、$ {conference_name}がある場合は正常に置き換えられますが、間にスペースがあると失敗します。

リストは動的配列です。また、置換テキストも動的です。ここでは、それらを正規表現ステートメントに適合させるためのオブジェクトとしてシミュレートしました。

前もって感謝します。

4

4 に答える 4

2

置換を明示的にパラメータ化できるバージョンは次のとおりです。

function doReplace(repl, str) {
  var regexStr = Object.keys(repl).map(function(s) {
    return s.replace(/([^\w\s])/g, '\\$1');
  }).join('|');
  return str.replace(new RegExp(regexStr, 'g'), function(m) {
    return repl[m];//it changed to "repl"  
  });
}

var replacements = {
  "${conference name}": "ABC",
  "${conference day}": "Monday"
};

doReplace(replacements, text) // => "<td>ABC</td><td>Monday</td>"
于 2012-12-19T17:29:08.557 に答える
1

検索する正確な文字列がわかっているため、正規表現はまったく必要ありません。

var str = "<td>${conference name}</td><td>${conference day}</td>";
var list = {
  "conference name":"ABC",
  "conference day":"Monday"
};
var i;
for( i in list) {
  if( list.hasOwnProperty(i)) {
    str = str.replace("${"+i+"}",list[i]);
  }
}

唯一の問題は、検索文字列に複数のプレースホルダーがある場合ですが、その場合、最も内側のコードは次のようになります。

do {
  oldstr = str;
  str = str.replace("${"+i+"}",list[i]);
} while(oldstr != str);
于 2012-12-19T16:56:34.477 に答える
1
    var str = "<td>${conference name}</td><td>${conference day}</td>";
    var list = ["${conference name}", "${conference day}" ];
    var listResult = ["ABC", "Monday" ];

汎用モデル

http://jsbin.com/atehun/6/watch の動作を確認してください

str, list, listResult上記の例に示すように構築します。

function genericReplace(str, list, listResult) {    

    var escape = function(text) {
        return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
    };
    
    var escList = [];
    for (var i=0; i < list.length; i++) {
      escList.push( escape(list[i]) );
    }
    
    var regEx = new RegExp(escList.join('|'), "g");

    return str.replace(regEx, function(word) {
      return listResult[list.indexOf(word)];
    });
}
于 2012-12-19T17:02:15.460 に答える
1

どのようにそのことについて?

var r = {
        "conference name": "ABC",
        "conference day" : "Monday"
    },
    reg = new RegExp("\\$\\{" + Object.keys(r).join("\\}|\\$\\{") + "\\}", "g"),
    str = "<td>${conference name}</td><td>${conference day}</td>";

str = str.replace(reg, function(v) {
    return r[v.substring(2, v.length - 1)];
});
于 2012-12-19T17:14:18.843 に答える