【发布时间】:2026-01-06 08:25:01
【问题描述】:
$.trim() 使用以下正则表达式修剪字符串:
/^(\s|\u00A0)+|(\s|\u00A0)+$/g
事实证明,这可能很丑陋,例如:
var mystr = ' some test -- more text new test xxx';
mystr = mystr.replace(/^(\s|\u00A0)+|(\s|\u00A0)+$/g, "");
这段代码挂起 Firefox 和 Chrome,它就像永远一样。 "mystr" 包含空格,但主要是 hex 160(A0) 字符。只有在没有前置 whitespace/A0 而是在字符串中的某个位置时,才会出现这个“问题”。我不知道为什么会这样。
这个表达式:
/^[\n\r\t \xA0]+|[\n\r\t \xA0]$/g
在所有测试场景中都能正常工作。也许有更好的模式?
来源:http://code.jquery.com/jquery-1.4.2.js
更新
您似乎无法复制和粘贴此示例字符串,在某些时候这些 A0 字符会被替换。 Firebug console 还将替换粘贴时的字符,您必须在单独的 html 文件/编辑器中创建自己的字符串来测试这一点。
【问题讨论】:
-
似乎 SO 将您的 A0 转换为 20 (至少当我将您的代码剪切并粘贴到 Emacs 时)。
-
@Nick:从 1.4.2 开始使用该正则表达式
-
@All:查看 Peter Jaric 的评论和我的更新
-
一个月前在jQuery bugtracker 中列出了一个类似的错误。灾难性的回溯,我经常这样做,但很少在代码中。
-
@jAndy,也许您应该在问题的来源中添加一个链接,以避免误解:code.jquery.com/jquery-1.4.2.js
标签: javascript jquery regex