2

これをキーワードに使っていますs='young girl jumping'

function selfreplace(s) {
    var words = ['man', 'jumping'];
    var re = new RegExp('\\b(' + words.join('|') + ')\\b', 'g');
    var specials = [];
    var match;
    var str = "";
    while(match = re.exec(s)) {
        str += match[0] + '(k)';
    }
    return str;
}

戻ってきていますjumping(k)

私は結果が欲しいyoung(s) girl(s) jumping(k)

4

6 に答える 6

1

words正規表現の外にあるかどうかを確認するのがおそらく最も簡単でしょう:

function selfreplace(s) {
   var words = ['man','jumping'];
   var re = new RegExp('\\b(\\w+)\\b', 'g');   
   var specials = [];
   var match;
   var str = "";
   while(match = re.exec(s))
   {
       if (words.indexOf(match[0]) !== -1))
           str += match[0] + '(k)';
       else
           str += match[0] + '(s)';
   }    
   return str;

}
于 2012-10-26T11:21:18.523 に答える
1

コールバックで置換を使用できます。

function selfreplace(s){
  return s.replace(/man|jumping|(\w+)/g, function(word, misc){
    return word + (misc? '(s)' : '(k)')
  })
}

一致した単語がmanorjumpingの場合、最初の引数 (一致全体) のみが設定されます。一致した単語がそれ以外の場合、最初のキャプチャ グループも設定されます。

先の単語のセットがわからない場合でも、その場で正規表現を生成できます。words単語以外の文字が含まれていないと仮定します。

function selfreplace(s, words){ //or any other method of passing 'words'
  var re = RegExp(words.join("|")+"|(\\w+)",'g');
  return s.replace(re, function(word, misc){
    return word + (misc? '(s)' : '(k)')
  })
}
于 2012-10-26T11:23:47.297 に答える
1

おそらく最善の解決策ではありませんが、私はそれをそこに捨てると思いました。

var str = "young girl jumping";

function replaceStr(s){

    var matched = new RegExp("man|jumping", "i");
    var newStr = "";
    var str = s.split(" ");
    for(var i=0; i<str.length;i++){
        if(str[i].match(matched)){
            newStr += str[i]+"(k) ";
        } else {
            newStr += str[i]+"(s) ";
        }
    }
    return newStr.substr(0, newStr.length-1); 
}

//replaceStr(str) returns "young(s) girl(s) jumping(k)"

デモはこちら

一致する単語が変わる可能性がある場合は、いつでもこの関数を修正して、2 番目の引数として配列を受け入れ、正規表現を動的に作成することができます。

replaceStr(s, matchArr){}var matched = new RegExp("("+matchArr.join("|")+")", "i");

于 2012-10-26T12:06:50.907 に答える
0

このような何かがあなたにヒントを与えるかもしれません:

var s = "young girl jumping",
    words = ['man','jumping'],
    regex = new RegExp("(" + words.join("|") +")", "g"),
    q = s.replace(regex, function( string ) {
        return string + "(k)";
    });

console.log(q); // "young girl jumping(k)"
于 2012-10-26T11:21:55.780 に答える
0

RegExpこれには a を使用できますが、あなたがしていることには aRegExpはやり過ぎです。Array代わりにメソッドを使用します。

var selfreplace = function selfreplace(s) {
    var words = ['man', 'jumping'],
        i = 0,
        suffix = '(s)';
    s = s.split(' ');
    for (i = 0; i < s.length; i += 1) {
        if (words.indexOf(s[i]) > -1) {
            s[i] = s[i] + '(k)';
        } else {
            s[i] = s[i] + '(s)';
        }
    }
    return s.join(' ');
};

これが実際のフィドルです:http://jsfiddle.net/4KAzw/

于 2012-10-26T12:09:46.773 に答える
0

単語のみを照合する場合、正規表現はまったく必要ありませんね。

==で単語を探すだけではどうですか

function selfreplace(s) {
    var words = ['man','jumping'];
    var input = s.split(" ");
    var str = "";
    for(var i=0; i<input.length; i++){
        var tmpString = "(s)";
        for(var j=0; j<words.length; j++){
            if(input[i] == words[j]){
                tmpString = "(k)";
            }
        }
        str += input[i]+tmpString;
    }
    return str;
}
于 2012-10-26T11:37:24.003 に答える