例えば、keyword, word, desu などの複数の単語を
[keyword], [word], [desu] のように鍵括弧つきに置換することを考えます。
以下のような文章があった場合、
koreha keyword ya word wo tikan suru situmon desu.
次のように置換したいです。
koreha [keyword] ya [word] wo tikan suru situmon [desu].
keywordはwordを包含しているので、この場合は先に指定されたキーワードを置換対象とし、
重複置換はしません。[key[word]]のようにはしたくありません。
ですので、上記の文章で、置換文字の指定順が word, keyword, desu の場合には、
koreha key[word] ya [word] wo tikan suru situmon [desu].
となればOKです。
これを実現したく、以下のようにしてみましたがうまくいきません。
var text = "koreha keyword ya word wo tikan suru situmon desu.";
var keyRegExp = new RegExp("(keyword|word|desu)", "g");
var result = text.replace(keyRegExp, "["+RegExp.$1+"]");
解決方法がありましたら教えてください。
var text = "koreha keyword ya word wo tikan suru situmon desu.";
var result = text.replace(/(keyword|word|desu)/g, "[$1]");
//alert(result);
で十分かと思いますがいかがでしょうか。
置換関数で置換対象にそれより優先して
置換されるべき語句が含まれるなら
そこを置換して返すようにする
var text = "koreha keyword ya word wo tikan suru situmon desu.";
var tgtStrs=['word','keyword','desu']
var keyRegExp = new RegExp("("+tgtStrs.join('|')+")", "g");
var result = text.replace(keyRegExp, repfnc);
alert(result)
function repfnc(str,ind,allStr){
var rtn="["+str+"]"
for(var i=0;i<tgtStrs.indexOf(str);i++){
if(str.search(tgtStrs[i])!=-1){
rtn=str.replace(tgtStrs[i],"["+tgtStrs[i]+"]")
break;
}
}
return rtn
}