计算巧合的数量 a regex 在 Javascript

我想写 regex, 计算数字 spaces/tabs/newline 在一篇文章中。 因此,我天真地写了以下内容: -


numSpaces : function/text/ { 
return text.match//\s//.length;
}


出于一些未知的原因,他总是回归
1

. 上述声明有什么问题? 从那时起,我解决了这个问题如下: -


numSpaces : function/text/ { 
return /text.split//\s//.length -1/;
}
已邀请:

三叔

赞同来自:

tl;dr: 总模板柜台


// THIS IS WHAT YOU NEED
const count = /str/ => {
const re = /YOUR_PATTERN_HERE/g
return //str || ''/.match/re/ || []/.length
}


对于那些到达这里的人寻找一个普遍的方式来计算模板条目的数量 regex 在字符串中,如果存在零条目,则不希望它失败,此代码是您需要的。 这是这样的演示:


/*
* Example
*/

const count = /str/ => {
const re = /[a-z]{3}/g
return //str || ''/.match/re/ || []/.length
}

const str1 = 'abc, def, ghi'
const str2 = 'ABC, DEF, GHI'

console.log/`'${str1}' has ${count/str1/} occurrences of pattern '/[a-z]{3}/g'`/
console.log/`'${str2}' has ${count/str2/} occurrences of pattern '/[a-z]{3}/g'`/



原始答案

您的源代码的问题是您缺少
http://www.javascriptkit.com/jsref/regexp.shtml
:


>>> 'hi there how are you'.match//\s/g/.length;
4


没有
g

部分 regex 它只对应于第一个条目并在那里停止。

还要注意你的 regex 将考虑两次连续空间:


>>> 'hi there'.match//\s/g/.length;
2


如果是不可取的,你可以做到:


>>> 'hi there'.match//\s+/g/.length;
1

奔跑吧少年

赞同来自:

如已经提到的

, 您可以使用
https://developer.mozilla.org/ ... /exec
对于所有巧合和计算每个条目的胸部; 优势仅受到记忆的限制,因为一般来说它是关于 20% 比使用慢
https://developer.mozilla.org/ ... match
.


var re = /\s/g,
count = 0;

while /re.exec/text/ !== null/ {
++count;
}

return count;

诸葛浮云

赞同来自:

//'a a a'/.match//b/g/ || []/.length; // 0
//'a a a'/.match//a/g/ || []/.length; // 3


基于

, 但在零结果的情况下纠正了实际工作。

快网

赞同来自:

/'my string'.match//\s/g/ || []/.length;

龙天

赞同来自:

这绝对是有很多陷阱的东西。 我与答案Paolo Bergantino合作,理解,即使它有一些局限性。 我找到了一个有弦代表的工作,日期是一个很好的地方,可以快速找到一些主要问题。 从这样的输入行开始:
'12-2-2019 5:1:48.670'


并设置paolo函数如下:


function count/re, str/ {
if /typeof re !== "string"/ {
return 0;
}
re = /re === '.'/ ? /'\\' + re/ : re;
var cre = new RegExp/re, 'g'/;
return //str || ''/.match/cre/ || []/.length;
}


我希望将正则表达式传输到函数更多,其次,我希望参数是一个字符串,以便客户端不应该完成 regex, 并简单地恰逢字符串作为服务类的标准方法 string.

现在,在这里,您可以看到我正在处理进入的问题。 借助以下方式:


if /typeof re !== "string"/ {
return 0;
}


我保证,输入与文字没有共同点。
0

,
false

,
undefined

或者
null

, 其中没有一个是字符串。 由于这些文字不包括在输入线中,因此应该没有巧合,但它们必须恰逢其一致
'0'

, 这是一个字符串。

借助以下方式:


re = /re === '.'/ ? /'\\' + re/ : re;


我处理设计师的事实 RegExp 将 /我想错了/ 解释字符串
'.'

作为 All character matcher
\.\


最后,因为我使用设计师 RegExp, 我需要给他一个全球旗帜
'g'

, 因此,他考虑了所有的巧合,而不仅仅是第一个员工,就像其他帖子一样。

我明白这是一个非常迟到的答案,但它对在这里绊倒的人来说很有用。 BTW 这是版本 TypeScript:


function count/re: string, str: string/: number {
if /typeof re !== 'string'/ {
return 0;
}
re = /re === '.'/ ? /'\\' + re/ : re;
const cre = new RegExp/re, 'g'/;
return //str || ''/.match/cre/ || []/.length;
}

风见雨下

赞同来自:

这个怎么样


function isint/str/{
if/str.match//\d/g/.length==str.length/{
return true;
}
else {
return false
}
}

要回复问题请先登录注册