Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
允许在javascript str.replace中使用新行字符_Javascript_Regex_Newline - Fatal编程技术网

允许在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");