使用 RegEx 在随机字符串中准确查找字母

这里要强调的是这个词准确。这需要适用于任意数量的排列,所以希望我的例子足够清楚。

给定一串随机字母,是否有可能(使用 RegEx)匹配给定字符串中的确切数量的字母?

因此,如果我有一个str1包含字母的字符串 ( )ABZBABJDCDAZ并且我想匹配字母JDBBAAstr2),我的函数应该返回,true因为str1包含足够多的所有正确字母。但是str1,如果要更改为ABAJDCDA,则该函数将false根据str2需要返回str1至少有2 个字母实例B

这是我到目前为止使用范围的内容:

const findLetters = (str1, str2) => {

  const regex = new RegExp(`[${str2}]`, 'g')

  const result = (str1.match(regex))

  console.log(result)

}


findLetters('ABZBABJDCDAZ', 'JDBBAA')

如您所见,它匹配正确的字母,但它匹配它们的所有实例。有什么方法可以使用 RegEx 做我想做的事吗?我在这里关注 RegEx 的原因是因为我需要对这段代码进行高度优化,而到目前为止,我的其他函数使用Array.every()indexOf()都太慢了。

注意:我的函数只需要返回一个true/false值。


慕村9548890
浏览 199回答 2
2回答

翻阅古今

尝试(这里我们对两个字符串的字母进行排序,然后创建正则表达式A.*A.*B.*B.*D.*J)const findLetters = (str1, str2) => {  const regex = new RegExp([...str2].sort().join`.*`)  return regex.test([...str1].sort().join``)}console.log( findLetters('ABZBABJDCDAZ', 'JDBBAA') );console.log( findLetters('ABAJDCDA', 'JDBBAA') );

翻翻过去那场雪

我不知道正则表达式是否是正确的方法,因为这也会变得非常昂贵。正则表达式很快,但并不总是最快的。const findLetters2 = (strSearchIn, strSearchFor) => {&nbsp; var strSearchInSorted = strSearchIn.split('').sort(function(a, b) {&nbsp; &nbsp; return a.localeCompare(b);&nbsp; });&nbsp; var strSearchForSorted = strSearchFor.split('').sort(function(a, b) {&nbsp; &nbsp; return a.localeCompare(b);&nbsp; });&nbsp; return hasAllChars(strSearchInSorted, strSearchForSorted);}const hasAllChars = (searchInCharList, searchCharList) => {&nbsp; var counter = 0;&nbsp; for (i = 0; i < searchCharList.length; i++) {&nbsp; &nbsp; var found = false;&nbsp; &nbsp; for (counter; counter < searchInCharList.length;) {&nbsp; &nbsp; &nbsp; counter++;&nbsp; &nbsp; &nbsp; if (searchCharList[i] == searchInCharList[counter - 1]) {&nbsp; &nbsp; &nbsp; &nbsp; found = true;&nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; if (found == false) return false;&nbsp; }&nbsp; return true;}// No-Regex solutionconsole.log('true: ' + findLetters2('abcABC', 'abcABC'));console.log('true: ' + findLetters2('abcABC', 'acbACB'));console.log('true: ' + findLetters2('abcABCx', 'acbACB'));console.log('false: ' + findLetters2('abcABC', 'acbACBx'));console.log('true: ' + findLetters2('ahfffmbbbertwcAtzrBCasdf', 'acbACB'));console.log('false: ' + findLetters2('abcABC', 'acbAACB'));随意测试它的速度并优化它,因为我不是 js 专家。此解决方案应在排序后对每个字符串迭代一次。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript