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