在输出中使用str.replace()输入

时间:2014-08-26 23:14:44

标签: javascript regex string replace

在JavaScript中,如何在新字符串中使用全部或部分匹配的字符串。例如:我有以下两个字符串:

var str1 = "Hello, my name is Vinnie Caprarola";
var str2 = "Hello, my name is John Doe";
var str3 = "Hello, my name is very weird";

我想用span元素包围名称,因此对名称应用'name'类。假设这不是所有的字符串,并且可以在之前和之后具有字符。另外,就像在str3中一样,如果'Hello,my name is'之后的部分没有大写,我应该假设它不是名字而忽略它。所以我的问题是:如何在所有这些字符串上运行完全相同的函数并获得此输出:

var str1 = "Hello, my name is <span>Vinnie Caprarola</span>";
var str2 = "Hello, my name is <span>John Doe</span>";
var str3 = "Hello, my name is very weird";

所以,我需要用基本'<span>' + name + '</span>'替换名称。如何在前一个表达式中获得name

3 个答案:

答案 0 :(得分:0)

我找到了答案!

当我阅读here时,您可以指定一个函数作为替换参数,并在该函数中匹配。所以让函数看起来像这样:

function doTheReplace(match) {
  return '<span>' + match + '</span>';
}

str1.replace(/Hello\, my name is [A-Z].* [A-Z].* /, doTheReplace);
str2.replace(/Hello\, my name is [A-Z].* [A-Z].* /, doTheReplace);
str3.replace(/Hello\, my name is [A-Z].* [A-Z].* /, doTheReplace);

这将产生请求的输出。

答案 1 :(得分:0)

这个功能应该这样做。

string.replace(/(?!^)([A-Z]\w+ ?)+/g, '<span>$&</span>');

答案 2 :(得分:0)

这是一个好的开始:

var str1 = "Hello, my name is Vinnie Caprarola";
var str2 = "Hello, my name is John Doe";
var str3 = "Hello, my name is very weird";
var str4 = "Hello, my name is Louis van Gaal";

var re = /Hello,\smy\sname\sis\s([A-Z]\w+.*[A-Z]\w+)/;
function addSpan(origStr) {
    return origStr.replace(re, 'Hello, my name is <span>$1</span>');
};

console.log(addSpan(str1)); //Hello, my name is <span>Vinnie Caprarola</span> 
console.log(addSpan(str2)); //Hello, my name is <span>John Doe</span> 

console.log(addSpan(str3)); //Hello, my name is very weird 
console.log(addSpan(str4)); //Hello, my name is <span>Louis van Gaal</span>

您可以在此处使用jsfiddle:http://jsfiddle.net/dywe8Ln5/2/

希望这能让你开始。使用正则表达式上的MDN文章:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions获取javascript正则表达式的权威指南。

@nicklaw,你的答案很接近,但问题是除了这部分字符串之外可能还有更多的内容。因此,您不能确定每个大写单词后跟另一个大写单词都是名称。