允许在javascript str.replace中使用新行字符
这个问题类似于“” 但是解决方案允许在javascript str.replace中使用新行字符,javascript,regex,newline,Javascript,Regex,Newline,这个问题类似于“” 但是解决方案/m不使用str.replace运行。您可以在以下位置测试代码: 我需要在这里修剪斜体, 尽管如此。 试试看 函数myFunction() { var str=document.getElementById(“demo”).innerHTML; var n=str.replace(//^(\s*)(.+)(\s*)$/m,“$1$2$3”);//也已测试/s 警报(str) document.getElementById(“demo”).innerHTML=n;
/m
不使用str.replace
运行。您可以在以下位置测试代码:
我需要在这里修剪斜体,
尽管如此。
试试看
函数myFunction()
{
var str=document.getElementById(“demo”).innerHTML;
var n=str.replace(//^(\s*)(.+)(\s*)$/m,“$1$2$3”);//也已测试/s
警报(str)
document.getElementById(“demo”).innerHTML=n;
}
避免换行出现问题的一种方法是不使用点,例如:
var n=str.replace(/<i>([^<]+)<\/i>/,"$1");
var n=str.replace(/([^这个答案主要是让您了解当前方法不起作用的原因,以及您通常如何解决它
m
没有帮助的原因是另一个答案是错误的。这不是m
所做的。m
除了字符串的开头和结尾外,还简单地使锚点匹配行的开头和结尾。一些正则表达式风格为您想要完成的任务提供了s
,但不是ECMAScript。这是最简单的事情(和一般解决方案)是将
(匹配除换行符以外的所有内容)替换为[\s\s]
(匹配空白和非空白,即所有内容)
但是,Casimir的方法在您的情况下更好,因为它避免了贪婪等其他问题。当然,正如Casimir所说,如果在开始和结束
标记之间有标记,则该方法将不起作用。在这种情况下,类似([\s\s]+?)
可能是一个选项,但如果在开始标记中嵌套了i
-标记或属性,或者大写了i
-标记等等,那么这仍然不是完整的解决方案
总之,您应该真正使用DOM操纵。特别是,因为您使用的是Javascript—DOM操纵的语言。您真正应该做的是遍历demo
元素中所有i
标记的DOM,并用它们的内部HTML替换它们。谢谢!使用/^(\s*)([\s\s]+)(\s*))$/
有效!关于“解析HTML是错误的”,该示例只是一个示例,当仅使用HTML片段和带有“regex面”的任务时,建议使用正则表达式进行解析(请参阅链接中的更多答案和讨论)@PeterKrauss当然,你应该知道,一旦你的标签出现嵌套或更复杂的版本(甚至不说HTML注释),你就会遇到问题。嗯……这是我的“说明性字符串”的好解决方案,但不是“通用字符串”的解决方案,其中有p.ex.bold标记。@彼得克劳斯:请参见我的编辑。示例必须是示例,而不是插图。
var n=str.replace(/<i>([^<]+)<\/i>/,"$1");
var n=str.replace(/<i>((?:[^<]+|<+(?!\/i>)+)<\/i>/,"$1");