我喜欢在JavaScript中替换所有出现的字符串,其中字符串不以<
或/
开头。我能够匹配这个词,但我只想替换这个词,而不是前面的字符。
var hitName1 = "body";
var testHtmlStr = "This is a test string with <body> html tag and with regular body string and another <body> html string and with no flexbody and with /body as in a url string";
var re5 = new RegExp('[^<\/]' + hitName1 , 'gi');
console.log(re5);
var testResult5 = testHtmlStr.match(re5);
console.log(testResult5);
我得到了结果[" body", "xbody"]
如果我使用replace()
代替match()
,我会用替换字符串替换“body”和“xbody”。但我想用替换字符串替换“body”。怎么做?
更多解释
使用替换:
var testResult5 = testHtmlStr.replace(re5, "HELLO");
console.log(testResult5);
替换后产生的字符串:
"This is a test string with <body> html tag and with regularHELLO string and another <body> html string and with no fleHELLO and with /body as in a url string"
替换功能将body
替换为HELLO
,但我想替换body
(使用nospace infront)。 xbody
也替换为HELLO
,但我只想替换body
而不是xbody
。
希望这更清楚。
答案 0 :(得分:3)
你可以做到的一种方法是在前面的角色周围定义一个捕获组:
var hitName1='body';
var testHtmlStr = "This is a test string with <body> html tag and with regular body string and another <body> html string and with no flexbody and with /body as in a url string";
var re5 = new RegExp('([^<\/]|^)' + hitName1, 'gi');
alert(testHtmlStr.replace(re5, '$1'));
因此,如果您想用fos
替换字符串,则可以编写$1fos
。
更新:关注@ yankee的评论后我更改了正则表达式:添加|^
以便testHtmlStr
以hitName1
开头或等于它
答案 1 :(得分:0)
嗯,我无法理解你想要做什么,但我认为你试图从包含标签和其他textNodes的字符串中替换一些标签
但是,我认为如果您使用“for”循环来验证哪些标签应该替换以及哪些标签不应该替换,那么您将能够做到所需。
for(result in testResult5)
{
if(result!="body") {// do what you want}
}