繁体   English   中英

Java正则表达式组

[英]Regex-Groups in Javascript

我在使用Javascript-Regexp时遇到问题。

这是一个非常简化的正则表达式,它说明了我的问题:

(?:\s(\+\d\w*))|(\w+)

此正则表达式只能匹配不包含禁止字符的字符串(所有不包含单词字符的字符串)。

唯一的例外是符号+
如果[0-9]在结尾,则允许以该符号开头的匹配。 +不得字(内出现44+44不是有效的匹配,但+4ad是)

为了仅在开头允许+,我说过前面必须有一个空格。 但是,我不希望空格成为比赛的一部分。

我使用以下工具测试了正则表达式: http: //regex101.com/#javascript,结果匹配看起来不错。

该正则表达式有两个问题:

  • 如果我在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);

正则表达式应如何显示?

您有多种选择可以实现自己的目标:

  • 一切都好。 不过,您也可以允许字符串以空格开头 只需从中获取捕获组( tokens[1]tokens[2] )即可,其中不包括空格。
  • 如果您不使用JavaScript,那么回头看可能会有所帮助。 不幸的是,它不受支持。
  • 要求非字边界的前+ ,这将使每个\\w前字符+防止比赛:

     /\\B\\+\\d\\w+|\\w+/ 

为什么此正则表达式将空格添加到匹配项中?

因为正则表达式确实匹配空白。 但是,它不会将\\s(\\+\\d\\w+)捕获的组中

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM