【问题标题】:Javascript Regex Substitution newline handling in browsers浏览器中的 Javascript 正则表达式替换换行符处理
【发布时间】:2011-01-13 10:56:55
【问题描述】:

我创建了一个 html 文本区域,可以在其中输入的任何文本的开头和结尾添加“[”和“]”。

我的问题是,当我在文本区域中输入一些多行数据时,正则表达式在 ff 和 ie 中的处理方式不同。

输入:

Iam
learning
regex

预期输出:(我在 FF 中得到这个)

[Iam]
[learning]
[regex]

在 IE 中的输出:

[Iam
][]
[learning
][]
[regex]

正则表达式代码在这里:

(textareaIDelement.value).replace(/(^)(.*)(\n{0,})($)/gm, "[" + "$2" +"]");

我在正则表达式中添加了(\n{0,}) 以匹配换行符..但它没有任何效果..

谢谢

【问题讨论】:

  • {0,}(零次或多次重复)可以写成*,顺便说一句。

标签: javascript regex newline


【解决方案1】:

在 IE 中,textarea 的value 属性中的行分隔符是\r\n。在所有其他主要浏览器中,它是\n。一个简单的解决方案是首先将行分隔符标准化为\n。我还简化了正则表达式:

textareaIDelement.value.replace(/\r\n/g, "\n").replace(/^(.*)\n*$/gm, "[$1]");

【讨论】:

    【解决方案2】:

    我的猜测是 Firefox 使用单个 0x0A (\n) 作为行分隔符,而 IE 使用 Windows 分隔符 0x0D 0x0A (\r\n)。

    根据正则表达式库的确切语义,它可能将两个 WIndows 字符独立匹配为行分隔符,因此它检测到行尾后跟一个 0 字符行。

    (这本身并不是一个实际的答案,因为我不太熟悉 JS 如何处理正则表达式元字符,但希望它能为您指明正确的方向。)

    【讨论】:

      猜你喜欢
      • 2014-03-10
      • 1970-01-01
      • 1970-01-01
      • 2010-11-12
      • 2016-09-23
      • 1970-01-01
      • 1970-01-01
      • 2017-11-03
      • 1970-01-01
      相关资源
      最近更新 更多