gpt4 book ai didi

javascript - Javascript 中的正则表达式组

转载 作者:行者123 更新时间:2023-11-30 17:28:59 24 4
gpt4 key购买 nike

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

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

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

这个正则表达式应该只匹配不包含禁止字符的字符串(所有不是单词字符的东西)。

唯一的异常(exception)是符号 +
如果 [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);

最佳答案

How should the regex look like?

您有多种选择来实现您的目标:

  • 你拥有它很好。您可能允许 string beginning不过,也可以代替空格。只需从中获取捕获组(tokens[1]tokens[2]),其中不包括空格。
  • 如果您没有使用 JavaScript,一个 lookbehind有帮助。很遗憾,它不受支持。
  • 需要一个非 word-boundary+ 之前,这将使 + 之前的每个 \w 字符阻止匹配:

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

Why does this regex add the space to the matches?

因为正则表达式确实匹配空格。它不会将 \s(\+\d\w+) 添加到 captured groups , 不过。

关于javascript - Javascript 中的正则表达式组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23592554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com