在不一致的字符串上分割

时间:2019-10-01 12:48:50

标签: javascript ecmascript-6

我有这些价值

['book_1', 'reader_2', 'book_borrower_3', 'book_reader_borrower_4']

如何获取他们的编号,该编号附加在最后一个_之后?我不能做str.split('_')[1],因为某些值的确有2个_,我也可以使用slice来获取最后一个字符,如果数字值超过1个字符该怎么办。

9 个答案:

答案 0 :(得分:7)

let values = ['book_1', 'reader_2', 'book_borrower_3', 'book_reader_borrower_4'];
let numbers = values.map(value => value.split("_").pop());
console.log(numbers);

答案 1 :(得分:3)

您可以为此使用正则表达式:/_(\d+)$/

const regex = /_(\d+)$/;
const books = ['book_1', 'reader_2', 'book_borrower_3', 'book_reader_borrower_4']

const numbers = books.map(book => book.match(regex)[1]);
console.log(numbers);

正则表达式的工作方式如下:

 _                 match a single _

  (                  start a matching group
    \d+                match one or more digits
  )                  close matching group
$                  assert end of string

您不一定需要开头_,它是否适合您的用例由您决定

答案 2 :(得分:3)

使用lastIndexOf()

let values = ['book_1', 'reader_2', 'book_borrower_3', 'book_reader_borrower_4']

let result = values.map(str => str.substring(str.lastIndexOf('_') + 1))

console.log(result);

答案 3 :(得分:2)

您可以匹配最后几个数字。

var array = ['book_1', 'reader_2', 'book_borrower_3', 'book_reader_borrower_4'],
    numbers = array.map(s => +s.match(/\d+$/));

console.log(numbers);

答案 4 :(得分:2)

因此,您可以在诸如popp之类的分割方法上使用pop方法

var digit = str.split('_').pop()

或从split返回的数组中获取最后一个元素

var spStr = str.split('_');
var digit = spStr[spStr.length-1]

答案 5 :(得分:0)

您可以使用lastIndexOfslice函数

const arr = ['book_1', 'reader_2', 'book_borrower_3', 'book_reader_borrower_4'];

const strs = arr.map(str => {
  let i = str.lastIndexOf("_");
  return str.slice(i+1);
});

console.log(strs);

答案 6 :(得分:0)

  

在代码段下方尝试此操作

var values = ['book_1', 'reader_2', 'book_borrower_3', 'book_reader_borrower_4'];
for (i = 0; i < values.length; i++) {
  console.log(values[i].substring(values[i].lastIndexOf('_') + 1));
}

答案 7 :(得分:0)

我相信@Philips regex解决方案和@AurelBílý解决方案很棒。这是一个很有趣的解决方案

const books = ['book_1', 'reader_2', 'book_borrower_3', 'book_reader_borrower_4'];
const bookNumbers = books.map((book) => book.split('_').reverse()[0]);

公认不是表现最好的,而是另一种实现方法!

答案 8 :(得分:0)

您可以先加入,然后再加入.match(/\d+(?=,|$)/g),以获取由,限定的字符串中的所有数字:

const books = ['book_1', 'reader_2', 'book_borrower_3', 'book_reader_borrower_4'];
const res = books.join().match(/\d+(?=,|$)/g);

console.log(res);