【问题标题】:Javascript: How can I replace the contents of a string but not in an HTML tag?Javascript:如何替换字符串的内容,但不能替换 HTML 标记中的内容?
【发布时间】:2010-04-28 08:59:14
【问题描述】:

我想编写一个 Javascript 函数来更改字符串中的文本 Lasvegas: 示例:

"大家好,在拉斯维加斯的各位,跟我来拉斯维加斯"

如何更改文本“Lasvegas”但不更改 HTML 标记中的内容 Lasvegas

【问题讨论】:

  • 开始标签和结束标签是什么意思,是HTML字符串吗? -- 别介意我编辑了你的问题,看看你的意思。
  • 非常感谢您的帮助!

标签: javascript replace indexing


【解决方案1】:

可能是这样的

str.replace(/Lasvegas[^<]/,'123')

【讨论】:

  • 这只有在Lasvegas 没有出现在字符串末尾并且如果需要替换多个匹配项时您的正则表达式可能需要是全局的(g 修饰符)时才有效。跨度>
  • 检查正常!但是当它在开始和结束标记中包含其他字符时,它会出现“Lastvegas”错误!例如:Lastvegas abc ef 错了
【解决方案2】:

编辑:忘记 JavaScript 支持负前瞻:

"Hello every one in Lasvegas, come <a href='xxx'>Lasvegas</a> with me"
    .replace(/(Lasvegas(?!<))/g, "World");

返回:

你好世界上的每一个人,跟我来拉斯维加斯


留下来让每个人都可以看到我的第一个答案是多么毫无意义;-)

如果“Lasvegas”不在字符串的末尾,Alexey 的回答会起作用。我不确定是否有更好的方法,但您可以使用替换函数来断言文本是否在标签内:

var str = "Hello every one in Lasvegas, come <a href='xxx'>Lasvegas</a> with me";
var out = str.replace(
            /(>?Lasvegas<?)/g,
            function ($0) 
            { 
                if ($0.slice(0,1) == ">") 
                    return $0; 
                else
                    return "World";
            }
);

out的内容:

你好世界上的每一个人,跟我来拉斯维加斯

【讨论】:

  • 当我将相同的字符放在标签的属性中时,我仍然有一些问题。例如:Lasvegas Text。它是错误的。请帮忙 !谢谢
  • @TuanTDA:我的正则表达式中的(?!&lt;) 部分是否定的前瞻。仅当前瞻中的内容不跟随匹配的文本时,它才会匹配该前瞻之前的内容。如果您将前瞻更改为(?!(?:[^&lt;]*&lt;)|(?:[^'&gt;]*'&gt;)),它应该会做得更好。
  • 对不起!花了你的时间!如果您不介意,请帮助最后一个问题。当我申请时 (?!(?:[^]*'>) 我仍然遇到错误!属性中的所有文本都不会替换,但它只会替换字符串的最后一个文本。您可以查看下面的详细信息。我执行以下操作: var str = "
    访问 Microsoft abc 检查 Microsoft 并替换为 Tuan 字符串 Microsoft abc 欢迎来到 Microsoft"; var out = str.replace(/(Microsoft(?!(?:[^]*'>)))/g, "团") document.write(out); 谢谢
  • 尽管 JavaScript 具有前瞻功能,但 IE 中存在一些错误,使其以奇怪的方式出错。因此最好避免。
  • @bobince:我会尽量记住这一点。我确实测试了我添加到答案中的正则表达式,它与问题中的输入配合得很好,尽管从任何标准来看它都不是一个复杂的正则表达式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 2012-12-07
  • 2013-12-07
  • 1970-01-01
  • 1970-01-01
  • 2013-05-20
相关资源
最近更新 更多