我现在遇到一个问题,这是我们团队无法控制的服务器当前限制的结果.
我们有一份应该由数据库完成的工作,但是我们被迫使用XML文件并使用Javascript/jQuery解析它.我们甚至没有脚本的写入权限(只能通过我们的FTP帐户)...我们不喜欢谈论它,但这就是我们得到的.
由于这些限制,问题在于我们需要解析大约500kb的大型XML文件,其中包含1700个文档名称/数字/ URL的记录.
这个数字非常复杂,例如"31-2b-1029E",与"T2315342"之类的东西混合在一起.
所以,我认为我需要使用一种名为"Natural Sort"的东西(谢谢stackoverflow).
无论如何,我试着在这里使用这个脚本:
/*
* Reference: http://www.overset.com/2008/09/01/javascript-natural-sort-algorithm/
* Natural Sort algorithm for Javascript - Version 0.6 - Released under MIT license
* Author: Jim Palmer (based on chunking idea from Dave Koelle)
* Contributors: Mike Grier (mgrier.com), Clint Priest, Kyle Adams, guillermo
*/
function naturalSort (a, b) {
var re = /(^-?[0-9]+(\.?[0-9]*)[df]?e?[0-9]?$|^0x[0-9a-f]+$|[0-9]+)/gi,
sre = /(^[ ]*|[ ]*$)/g,
dre = /(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/,
hre = /^0x[0-9a-f]+$/i,
ore = /^0/,
// …Run Code Online (Sandbox Code Playgroud) 这个 Perl 脚本是我想在 JavaScript 中实现的(源代码):
s/([0-9]+)/sprintf('%04d',$1)/ge;
Run Code Online (Sandbox Code Playgroud)
显然sprintf在 JavaScript 中不可用,但我知道您可以构建一个直接处理关注数量的函数,但是在我的情况下,我有一个长字符串,其中可能包含多个数字,可以将这样的字符串转换为abc8 23 123:(abc000008 000023 000123使用以 6 位为例)。
所以它要么是我没有得到的一些聪明的正则表达式,要么以某种方式找到某种方法将长字符串分成不同的字符串和数字的数组,并且只对数字一个一个地进行操作。
我真的想避免后一种方法,因为 1) 在这种情况下速度是一个问题,并且 2) 在正确的位置拆分字符串所涉及的正则表达式似乎比在这一点上添加前导零更难。
最后,还有其他方法可以使用 JavaScript 的正则表达式吗?