我将其用作关键字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)
答案 0 :(得分: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;
}
答案 1 :(得分:1)
您可以使用替换回调。
function selfreplace(s){
return s.replace(/man|jumping|(\w+)/g, function(word, misc){
return word + (misc? '(s)' : '(k)')
})
}
如果匹配的单词是man
或jumping
,则只设置第一个参数(整个匹配)。如果匹配的单词是任何其他单词,则也会设置第一个捕获组。
如果你不知道前面的单词集,你仍然可以动态生成正则表达式。假设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)')
})
}
答案 2 :(得分: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)"
DEMO此处
如果匹配的单词可能会改变,那么您可以随时修改此函数,使其接受数组作为第二个参数,然后动态创建正则表达式
replaceStr(s, matchArr){}
和
var matched = new RegExp("("+matchArr.join("|")+")", "i");
答案 3 :(得分: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)"
答案 4 :(得分: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;
}
答案 5 :(得分:0)
你可以使用RegExp
,但对于你正在做的事情,RegExp
是过度的。我会改用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/