计算字符串末尾的匹配项

时间:2017-11-15 18:43:29

标签: javascript

我想计算字符串末尾字符串出现次数。我希望它忽略不在最后的事件,如果没有,我希望它返回零。

要查找的终端字符串:" -1"

e.g. string = 1
// 0
e.g. string = 1-1
// 1
e.g. string = 1-1-1
// 2
e.g. string = 1-2-1
// 1
e.g. string = 1-2-1-2-1
// 1
e.g. string = 2-1-1-1-1
// 4
e.g. string = 1-1-2
// 0

我希望它计算字符串末尾的所有匹配项,而不仅仅是字符串中任何位置的匹配项。

我试过了:

var occurrences = string.match(/(-1)*$/).length;

我在这里有一个JS小提琴:JS Fiddle

它返回" 2",无论我的字符串是什么。

5 个答案:

答案 0 :(得分:2)

您需要处理返回数组的第一个元素:

string.match(/(-1)*$/)[0].length/2

找到第一个元素的长度,该元素的末尾是"-1"的匹配字符串,除以2,因为字符串"-1"的长度为2

引用MDN String.prototype.match()

  

返回值

     

如果字符串与表达式匹配,它将返回一个数组   包含整个匹配的字符串作为第一个元素,后跟   括号中捕获的任何结果。如果没有匹配,则为null   返回。

function count() {
  console.log(string.match(/(-1)*$/)[0].length / 2)
}

var string = "1"
// 0
count();

string = "1-1"
// 1
count();

string = "1-1-1"
// 2
count();

string = "1-2-1"
// 1
count();

string = "1-2-1-2-1"
// 1
count();

string = "2-1-1-1-1"
// 4
count();

string = "1-1-2"
// 0
count();

答案 1 :(得分:1)

向后走,数数?



var string = "2-1-1-1-1";
var find =   "-1";
var match =  0;

for (var i = string.length; i >= 0; i -= find.length) {
  if (string.substr(i - find.length, find.length) == find)
    match++;
  else
    break;
}

console.log("="+match)




答案 2 :(得分:1)

使用String#match查找到达结尾的-1链,然后按-1拆分,得到长度-1。当您分割一串-1-1-1时,您将获得一个包含四个项目的数组。现在我们可以提取长度,并将其减少一个。



function m(str) {
  return str.match(/(-1)*$/g)[0].split(-1).length - 1;
}

console.log(m('1')) // 0
console.log(m('1-1')) // 1
console.log(m('1-1-1')) // 2
console.log(m('1-2-1')) // 1
console.log(m('1-2-1-2-1')) // 1
console.log(m('2-1-1-1-1')) // 4
console.log(m('1-1-2')) // 0




答案 3 :(得分:0)

非正则表达版:

plt.xticks(ha='left')

答案 4 :(得分:0)

试试这个。这对所有测试值都运行正常



function countOnesAtTheEnd(s){
var array = s.split("-");

var count = 0;
for(var i =1; i<array.length; i++)
{ 
if(array[i] =="1"){
 count++;
 }
 else count = 0;

}
console.log(count);
}
countOnesAtTheEnd("1");
countOnesAtTheEnd("1-1");
countOnesAtTheEnd("1-1-1");
countOnesAtTheEnd("1-2-1");
countOnesAtTheEnd("1-2-1-2-1");
countOnesAtTheEnd("2-1-1-1-1");
countOnesAtTheEnd("1-1-2");
&#13;
&#13;
&#13;