gpt4 book ai didi

JavaScript.Replace 在 HTML 标签外用美元符号 ($) 包裹的内容

转载 作者:行者123 更新时间:2023-11-29 10:21:34 25 4
gpt4 key购买 nike

注意:我-不是-尝试使用正则表达式解析 HTML

我正在尝试替换字符串中用 $ 符号 ($for example$) 包裹的任何内容。我设法想出了 str.replace(/\$([^\$]*)\$/g), "hello $1!") ,但我遇到了一些问题,无法确保在这些字符串包含在 HTML 标记中时我不会替换它们。

示例字符串:$someone$, <a>$welcome$</a>, and $another$

表达式:/[^>]\$([^\$]*)\$[^<]/g

预期输出:hello someone!, <a>$welcome</a>, and hello another!

实际输出:$someonhello , !elcomhello , and !nother$

测试代码:alert("$someone$, <a>$welcome$</a>, and $another$".replace(/[^>]\$([^\$]*)\$[^<]/g, "hello $1!"));

fiddle : http://jsfiddle.net/WMWHZ/

谢谢!

最佳答案

请记住,您的测试用例中有 6 个“$”。这里的问题是,当您尝试检查前一个字符是否不是“>”时,正则表达式会向前移动并匹配 4th5th 美元之间的内容符号,捕获 "</a>, and "弄得一团糟。

试试这个:

$('div').text(test.replace(/(^|[^>])\$([^<][^\$]*)\$(?!<)/g, "$1hello $2!"))​

Javascript 不支持正则表达式中的后向查找,但它支持先行查找((?!<) 部分)。为了模拟 lookbehinds,您正确地尝试放置 [^>]在美元之前,但随后字符匹配,因此您必须捕获它并将其再次放入字符串中。

您只需要稍微改进一下,因为如果“$”位于字符串的开头,则不会捕获该组。

此外,为避免上述问题,您应该检查第一美元后是否没有“<”,所以我放了一个 [^<]。在捕获组的开头。这也意味着它不会捕获美元符号之间的空字符串(如“$$”),它们必须至少包含一个字符。

这样,您就得到了预期的结果。

关于JavaScript.Replace 在 HTML 标签外用美元符号 ($) 包裹的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10739844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com