gpt4 book ai didi

JavaScript 正则表达式字符串澄清开始 + str.replace()

转载 作者:行者123 更新时间:2023-12-01 01:49:19 24 4
gpt4 key购买 nike

有一个关于字符串正则表达式 anchor 标记 ^ 开头的问题。我试图清理一个字符串以检查它是否是回文,并找到了使用正则表达式的解决方案,但无法理解我为字符串 anchor 标记开头找到的解释:

据我了解:

^ 表示后面的任何表达式都必须匹配,从字符串的开头开始。

问题:

为什么下面两个输出之间存在差异:

1)

let x = 'A man, a plan, a canal: Panama';
const re = new RegExp(/[^a-z]/, 'gi');
console.log(x.replace(re, '*'));

输出:A*man**a*plan**a*canal**Panama

VS。

2)

let x = 'A man, a plan, a canal: Panama';
const re = new RegExp(/[a-z]/, 'gi');
console.log(x.replace(re, '*'));

输出:* ***, * ****, * *****: ******

VS。

3)

let x = 'A man, a plan, a canal: Panama';
const re = new RegExp(/^[a-z]/, 'gi');
console.log(x.replace(re, '*'));

输出:* 人、计划、运河:巴拿马

如果我对上述每种情况的解释有误,请告诉我:

1) 对此感到困惑。如果它匹配[a-z]不区分大小写+全局查找的字符类,并且字符串 anchor 的开头^表示它必须在每个字符串的开头匹配,如果它不返回句子中的所有单词?由于每个单词都是 [a-z] 不敏感字符的匹配,这些字符出现在每次全局查找迭代的每个字符串的开头?

(即

  • 在开头查找“A”
  • 然后在下一次迭代中,它应该开始搜索剩余的字符串“man”
  • 找到一个空格...然后继续搜索“man”?
  • 等等等等...

问:为什么当我调用 replace 时它只针对非 alpha 内容?在这种情况下,我应该将 ^ 视为反转 [a-z] 吗?

2)这看起来非常简单,找到所有出现的[a-z]并将它们替换为开头。 1) 的逆情况??

3) 对此也感到困惑。我不确定这与 1) 有什么不同。

/^[a-z]/gi 对我来说意味着:“从正在查看的字符串的开头开始,匹配所有字母字符,不区分大小写。重复全局查找”。

比较:

1) /[^a-z]/gi 对我来说意味着:“匹配以字母字符开头的所有字符类。不区分大小写,重复搜索全局查找。”

这意味着它们的意思完全相同@_@。请告诉我我对上述案例的理解有何偏差。

最佳答案

  • 你的第一个表情[^a-z]匹配除字母小写字母以外的任何内容,因此这就是为什么当您替换为 * 时所有特殊字符(例如空格、逗号和冒号)都将被替换。

  • 你的第二个表达式[a-z]匹配任何字母、小写字母,因此提到的特殊字符不会被 * 替换.

  • 你的第三个表达式^[a-z]匹配字符串开头的字母小写字母,因此只有第一个字母被 * 替换.

对于前两个表达式,全局标志 g确保替换与指定模式匹配的所有字符,无论其在字符串中的位置如何。然而,对于第三种模式,因为 ^将模式锚定在字符串的开头,仅替换第一个字母。

正如您提到的,i flag 确保不区分大小写,因此所有三种模式都可以对小写和大写字母进行操作,从 a 开始。至zAZ .

Angular 色^因此有两个含义:

  • 它否定字符集中的字符。
  • 它断言字符串开头的位置。

关于JavaScript 正则表达式字符串澄清开始 + str.replace(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51687578/

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