【发布时间】:2014-05-11 12:21:50
【问题描述】:
我在使用 Javascript-Regexp 时遇到问题。
这是一个非常简化的正则表达式,它演示了我的问题:
(?:\s(\+\d\w*))|(\w+)
这个正则表达式应该只匹配不包含禁止字符的字符串(所有不是单词字符)。
唯一的例外是符号+
如果[0-9] 在尾随,则允许以该符号开始匹配。
并且+ 不得出现在单词中(44+44 不是有效匹配项,但+4ad 是)
为了让+只在开头,我说前面必须有一个空格。但是,我不希望空格成为匹配的一部分。
我用这个工具测试了我的正则表达式:http://regex101.com/#javascript,结果匹配看起来很好。
该正则表达式有 2 个问题:
- 如果我在我的 JS 代码中使用它,空格总是匹配的一部分
- 如果
+42出现在行首,则不匹配
我的问题:
- 正则表达式应该是什么样的?
- 为什么这个正则表达式会在匹配项中添加空格?
这是我的 JS 代码:
var input = "+5ad6 +5ad6 sd asd+as +we";
var regexp = /(?:\s(\+\d\w*))|(\w+)/g;
var tokens = input.match(regexp);
console.log(tokens);
【问题讨论】:
-
空格:见stackoverflow.com/questions/7505762/… -- 使用非捕获组不会将其从total匹配中排除,仅将其添加到单个匹配组中.
-
@Jongware 那么有没有办法在没有空格的情况下提取令牌?不幸的是,JS 不支持lookbehinds
标签: javascript regex