gpt4 book ai didi

javascript - 正则表达式有问题

转载 作者:行者123 更新时间:2023-11-29 21:38:30 25 4
gpt4 key购买 nike

我实际上有 2 个问题。我对正则表达式的理解似乎存在知识差距,所以我想知道是否有人可以帮助我。

1)

function LongestWord(sen) { 
var word = /[^\W\d]([a-z]+)[$\W\d]/gi;

var answer = word.exec(sen);


return answer;
}
console.log(LongestWord("9hi3"));

为什么这会返回 [hi3, i] 而不是预期的 [9hi3, hi]。我清楚地说明,在字母出现之前,数字或非单词字符必须在我的匹配项中。我也有 + 符号,贪婪应该让整个团队都嗨。

2)

function LongestWord(sen) { 
var word = /[\b\d]([a-z]+)[\b\d]/gi;

var answer = word.exec(sen);


return answer;
}
console.log(LongestWord("hi"));

更重要的是,为什么这会返回null。 #1 是我尝试解决这个问题。但是你知道我在这里想做什么。

请告诉我我对这两个问题的想法有什么问题,而不是给我一个解决方案。如果我不了解我做错了什么,我将继续重复同样的错误。谢谢!

最佳答案

让我们使用您的示例字符串浏览您的正则表达式:9hi3

1) [^\W\d]([a-z]+)[$\W\d]

首先,我们有[^\W\d]。通常,^ 匹配字符串的开头,但当它位于 [] 内部时,它实际上否定了该 block 。所以,[^\W\d] 实际上是指任何一个字符,它是一个单词字符,而不是一个数字。这显然会跳过 9,因为它是一个数字,并且匹配 h

下一部分,([a-z]+),匹配你期望的,除了 h 已经匹配,所以它只匹配 i

然后,[$\W\d] 匹配一个 $ 符号、一个非单词字符或一个数字。请注意,就像 ^ 一样,$[] 中时不匹配字符串的结尾。

2) [\b\d]([a-z]+)[\b\d]

对于这一个,您应该首先查看 documentation exec 看看为什么它可以返回null。具体来说:

If the match fails, the exec() method returns null.

所以,您知道匹配失败了。为什么?

同样,您的困惑来自于不了解特殊字符在 [] 中如何改变含义。在这种情况下,\b 从匹配单词边界更改为匹配退格字符。

值得注意的是,您的第二个正则表达式将匹配您测试第一个正则表达式的字符串 9hi3,因为它以数字开头和结尾。但是,您使用 hi 对其进行了测试。

希望这些解释对您有所帮助。

为了将来引用,您应该查看 RegExp guide on MDN .

另外,一个测试正则表达式的好工具是 regexpal .我强烈建议您使用它来帮助您准确了解正则表达式的作用。

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

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