仅当一个单词前面没有某个字符时才替换它

时间:2011-07-11 08:41:05

标签: javascript regex string

我喜欢在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

希望这更清楚。

2 个答案:

答案 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'));

jsFiddle Demo

因此,如果您想用fos替换字符串,则可以编写$1fos

更新:关注@ yankee的评论后我更改了正则表达式:添加|^以便testHtmlStrhitName1开头或等于它

答案 1 :(得分:0)

嗯,我无法理解你想要做什么,但我认为你试图从包含标签和其他textNodes的字符串中替换一些标签

但是,我认为如果您使用“for”循环来验证哪些标签应该替换以及哪些标签不应该替换,那么您将能够做到所需。

for(result in testResult5)
{
    if(result!="body") {// do what you want}
}