允许在javascript中添加新的行字符
Allowing new line characters in javascript str.replace
这个问题类似于"允许javascript regex中的新行字符"但/m
不能与str.replace
一起运行。您可以在本页
<p id="demo"><i>I need to TRIM the italics here,
despite this line.</i>
</p>
<button onclick="myFunction()">Try it</button>
<script>
function myFunction()
{
var str=document.getElementById("demo").innerHTML;
var n=str.replace(/^('s*)<i>(.+)<'/i>('s*)$/m,"$1$2$3"); //tested also /s
alert(str)
document.getElementById("demo").innerHTML=n;
}
</script>
这个答案主要是为了让您了解当前方法不起作用的原因,以及您通常如何解决它。
m
不起作用的原因是另一个答案是错误的。这不是m
所做的。m
只是使锚匹配字符串的开始和结束,而不是字符串的开始和结束。有些正则表达式有s
来实现您想要实现的功能,但ECMAScript没有。最简单的事情(和一般解决方案)是用['s'S]
(匹配空白和非空白,即所有内容)替换.
(匹配除换行符外的所有内容)。
然而,卡西米尔的方法更适合你,因为它避免了一些其他问题,比如贪婪。当然,正如Casimir所说,如果在开始和结束<i>
标记之间有标记,那么这种方法将不起作用。在这种情况下,像<i>(['s'S]+?)</i>
这样的东西可能是一个选择,但这仍然不是完整的解决方案,如果您在开始标记中嵌套i
-标签或属性,或大写I
-标签和诸如此类的东西。
总之,使用正则表达式解析HTML是错误的!您应该真正使用DOM操作。特别是,因为您正在使用Javascript -用于DOM操作的语言。您真正应该做的是遍历demo
元素中所有i
标记的DOM,并用它们的内部HTML替换它们。
避免换行问题的一种方法是不使用点,例如:
var n=str.replace(/<i>([^<]+)<'/i>/,"$1");
我用[^<]
替换了点(所有不是<,包括换行符)
这里不需要m修饰符,也不需要捕获白色字符。
注意,我的解决方案假设你没有任何<<i>
和</i>
之间>
var n=str.replace(/<i>((?:[^<]+|<+(?!'/i>)+)<'/i>/,"$1");
相关文章:
- 拆分文本以每隔n个字符添加一行新行,并注意空格
- 使用Google Maps API向标记添加多个字符
- 如何使用Javascript在给定的句子中找到大写单词并在其前面添加一个字符
- 在输入中添加打断html的字符
- 将组成单词的字符添加到数组的开头
- 在跨度中每3个字符添加一个空格
- 将文本和html unicode字符添加到textarea元素中
- Jquery计算元素中的字符,并为太短的字符添加填充
- 如何使用 JavaScript 将字符添加到字符串的随机空间中
- 使用 javascript/jquery 为字符串中的某些字符添加 span 标记
- 使用 For 循环追加.在追加之前将字符串中的字符添加到元素中
- 将字符添加到值
- 为字符串中的某些字符添加下划线
- 将字符添加到输入中,除非输入值是计算结果
- 通过js将新添加的字符添加到输入中
- 每隔三个数字字符添加一个逗号
- 如何将字符添加到段落's的末尾
- 如何在JavaScript中的表单中每三个字符添加一个空格并具有替换函数
- 为每 5000 个字符添加 24 小时到 getTime()
- 如何在javascript中每三个字符添加一个换行符