替换/删除两个字符之间的所有内容[重复]
Posted
技术标签:
【中文标题】替换/删除两个字符之间的所有内容[重复]【英文标题】:Replace/remove everything between two characters [duplicate] 【发布时间】:2012-05-28 05:18:26 【问题描述】:var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
如何删除H
和S
之间的所有内容,以便结果为ABCDEFGHSTUVWXYZ
?
【问题讨论】:
只需使用ABCDEFGHSTUVWXYZ
。在单词之间阅读:重新表述你的问题。您希望删除 H 和 S 之间的每个字母吗?第一个和最后一个字母是可变的吗?
我不能只使用ABCDEFGHSTUVWXYZ
,这只是一个例子。显然我知道手动删除它是一种选择。
是的,但是如果您提供一个不太简单的示例(除非您的用例真的是那么简单),它可能会帮助我们为您提供一个更好/更多-适用于您的问题的解决方案。
【参考方案1】:
var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
console.log( alphabet.replace(/H.*S/, 'HS') )
或者只是:
var alphabet = "ABCDEFGHSTUVWXYZ";
【讨论】:
您好,我有 html 源代码,我需要从中删除所有脚本标签。我试过下面的代码,但它也删除了 2 个实例之间的代码。代码:'Hello this is <script> demo </script> that you <script> demo </script> <style>know</style>'.replace(/<script>.*<\/script>/, '')
结果:Hello this is <style>know</style>
预期:Hello this is that you <style>know</style>
@Nilay 您应该提出新问题,而不是评论其他问题。我会尝试在这里回答。你真的不应该剥离<script>
标签。出于安全原因,这是一种非常糟糕的做法。有太多可能出错的地方。如果原始代码中有<scr<script></script>ipt>alert('bad');
怎么办?怎么样:<img src=":" onerror="alert('bad');" />
?
@Nilay 相反,您应该将允许的特定标签和属性列入白名单,或者更好地使用 BBCode,甚至更好地使用 Markdown。我敢肯定,无论您使用哪种语言,您都可以找到一些用于将 Markdown 编译为 HTML 的库。
@Nilay 顺便说一句,要获得您想要的输出,您应该通过将其更改为 .*?
来使您的正则表达式 .*
非贪婪,并使用 g
标志使您的正则表达式全局化: /<script>.*?<\/script>/g
,但请不要这样做。知道我展示的两个示例来解决这个问题并让脚本运行并不是唯一的两个。有成千上万,你永远无法得到它们。尝试这样做将是一场无休止的战斗,人们会不断寻找解决方法。
谢谢@paulpro,我试过/<script>.*?<\/script>/g
,但效果不如预期!因为如果 HTML 正文的第一行是脚本,最后一行也是脚本,那么它会删除所有内容。所以我使用 jQuery 从整个 DOM 中删除所有脚本元素。【参考方案2】:
var strippedAlphabet = alphabet.replace(/H.*S/, 'HS');
【讨论】:
"___H___S_____H__S____".replace(/H.*S/, 'HS')
不是预期的输出:___HS____HS____
@vsync 我只是在 regex101 上进行试验,发现这个 regex 似乎可以正常工作并产生预期的输出:H([^HS]1,)S
。我在您的评论中使用案例对其进行了测试,并产生了预期的输出。把它留在这里以防其他人需要它。显然我不能把它作为答案发布,因为这个问题已经结束了,虽然:(以上是关于替换/删除两个字符之间的所有内容[重复]的主要内容,如果未能解决你的问题,请参考以下文章