0

编辑:我可能应该提到这是一个 Backbone.js 路由。拆分它不是一种选择。

使用以下字符串:

!/example/c/0/0/0/0

我正在尝试使用“match()”来提取斜线之间的值。我的问题是最后一项(“/ 0”)可能并不总是在字符串中。这是我目前拥有的:

'!/example/c/0/0/0/0'.match(/^!(\/[A-z0-9\-_]+|)\/c\/([0-9]+)\/([0-9]+)\/([0-9]+/)

这将返回一个数组,其中包含 'example'、'0'、'0'、'0' 如果示例存在,则返回 ''、'0'、'0'、'0' 如果示例不存在......所以在最后我想看到的结果是:

'example', '0', '0', '0', ''

当最后一项不存在或:

'example', '0', '0', '0', '0'

当它存在时。所以基本上是最后一个项目之前的斜线让我感到震惊!任何帮助将不胜感激。

4

3 回答 3

3

更喜欢拆分,因为您知道分隔符,这会更容易!

var toSplit = "!/example/c/0/0/0/0";
var splitted = toSplit.split('/');
于 2012-07-10T15:15:27.993 回答
1

.split()函数可能足以满足您的要求,但您正在寻找的正则表达式如下:

/^!\/([A-z0-9\-_]+)\/c\/(\d+)\/(\d+)\/(\d+)\/(\d*)/

'!/example/c/0/0/0/'.match(/^!\/([A-z0-9\-_]+)\/c\/(\d+)\/(\d+)\/(\d+)\/(\d*)/)
["!/example/c/0/0/0/", "example", "0", "0", "0", ""]

'!/example/c/0/0/0/0'.match(/^!\/([A-z0-9\-_]+)\/c\/(\d+)\/(\d+)\/(\d+)\/(\d*)/)
["!/example/c/0/0/0/0", "example", "0", "0", "0", "0"]

\d是 的快捷方式[0-9]*表示重复 0 次或多次,而+表示重复 1 次或多次。

于 2012-07-10T15:36:28.000 回答
1

如果您不需要对值进行严格检查,则可以使用以下内容:

"!/example/c/0/0/0/0".match(/^!\/([^/]+)\/c\/([^/]+)\/([^/]+)\/([^/]+)\/([^/]*)/);

请记住,据我所知,您无法仅使用您正在寻找的确切数组match:数组的第一个元素是整个匹配的字符串,而不是“示例”。

于 2012-07-10T16:11:49.580 回答