javascript 使用.match和.search之间的区别

aor9mmx1  于 2023-02-15  发布在  Java
关注(0)|答案(4)|浏览(155)

我使用下面的代码作为coderbyte:

function VowelCount(str) {
    // code goes here  
    return str.match(/[aeiou]/gi).length;
}

// keep this function call here
// to see how to enter arguments in JavaScript scroll down
print(VowelCount(readline()));

我理解大部分代码,但以下部分除外:
1.正斜杠和方括号有什么作用?

  1. gi是做什么的?
  2. search()match()之间有什么区别?我应该在什么条件下使用什么?
9udxz4iz

9udxz4iz1#

有几个函数可以在一个字符串中搜索另一个字符串,最著名的可能是.indexOf().search().match()

str.indexOf(s)

返回stringstr第一个匹配Strings的索引(位置)。

str.search(s)

做 * indexOf()做的 * 但是允许s不仅仅是一个字符串,而且是一个正则表达式。(实际上,它甚至认为一个“正常”字符串是这样的)。

str.match(s)

类似于 *search(),但 * 不是返回第一个示例的索引,而是**以数组的形式返回 * 所有 * 示例。
现在,关于
/[]/
和类似的,这是(一个例子)前面提到的正则表达式。更多关于什么做什么可以找到here的信息。简而言之,它定义了一个字符串模式来搜索以及如何搜索它。

a0zr77ik

a0zr77ik2#

引用the doc
当您想知道是否在字符串中找到了模式时,使用search(类似于正则表达式test方法);要获得更多信息(但执行速度较慢),请使用match(类似于正则表达式exec方法)。
在这种情况下,仅仅知道字符串中有一个元音('a'、'e'、'i'、'o'或'u'--这就是所谓的字符类表达式[aeiou]所表示的)是不够的,因为函数的目的是 * count * 个元音。
因此,它扫描字符串,将 * all *(这就是/g修饰符的作用)匹配项收集到一个数组中,而不考虑字符大小写(/i),然后返回该数组的长度。
但是这个函数有一个bug,因为String.match返回null,如果param string没有元音,这个函数就会抛出一个错误:

VowelCount('ddd'); // TypeError: Cannot read property 'length' of null

必须通过对匹配结果进行额外检查来修复。

function vowelCount(str) {
  var vowels = str.match(/[aeiou]/gi);
  return vowels ? vowels.length : 0;
}
ubbxdtey

ubbxdtey3#

斜线分隔正则表达式(RegExp())文本(与使用new RegExp()表示法相反),方括号是正则表达式要匹配的一系列字符。
参考文献:

bxjv4tth

bxjv4tth4#

正斜杠用于 Package 正则表达式语句。

gi表示搜索将是全局的(所有匹配项)并且不区分大小写。

相关问题