как передать несколько разделителей в функции разделения в javascript - PullRequest
0 голосов
/ 03 марта 2020

Я практикую javascript вопросов. Я хочу split строку, которая имеет -.,. как передать все три в split function I мой первый контрольный пример пройден, если я использовал вот так str.split('-'), но другой контрольный пример не прошел? s

entensify("May-the-force-be-with-you") should return "May the force be with you".
    sentensify("The.force.is.strong.with.this.one") should return "The force is strong with this one".
    sentensify("There,has,been,an,awakening") should return "There has been an awakening".

любое лучшее решение для прохождения всех тестовых случаев

function sentensify(str) {

  //console.log(str.split(/\s*(?:-;|$)\s*/).join(' '))
return str.split('-').join(' ')

}

Ответы [ 4 ]

0 голосов
/ 03 марта 2020

Regex может использоваться для сопоставления с несколькими образцами; однако, если вы ищете разрыв токена и затем соединяетесь с пробелом, вы можете рассмотреть возможность использования метода replace().

Для удобства я поместил пример в набор тестов:

function sentensify(str) {
  return str.replace(/[-.,]/g, ' ')
}

mocha.setup('bdd')

describe('sentensify', function () {
  let expectation = 'This is a test'
  
  it('translates string from hyphens to spaces', function () {
    expect(sentensify('This-is-a-test')).to.equal(expectation);
  });

  it('translates string from periods to spaces', function () {
    expect(sentensify('This.is.a.test')).to.equal(expectation);
  });
  
  it('translates string from commas to spaces', function () {
    expect(sentensify('This,is,a,test')).to.equal(expectation);
  });
  
  it('translates hyphens, commas, and strings to spaces', function () {
    expect(sentensify('This-is,a.test')).to.equal(expectation);
  });
});

mocha.run()
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/mocha/7.1.0/mocha.min.css" integrity="sha256-zX6KvfdhTfwaVsK5hogXY+wWW9Nf3wyloswn7WLZ9dg=" crossorigin="anonymous" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/mocha/7.1.0/mocha.min.js" integrity="sha256-lDr02Gr5QIpJQ/k0/Bxx80/1G80tLKt/lruAK8bIYX0=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/expect.js/0.3.0/index.min.js" integrity="sha256-eIk9dgZF9fcJLuPyL6F9ZnhgmRPnG0OLM9Yyh5qLODU=" crossorigin="anonymous"></script>

<div id="mocha"></div>
0 голосов
/ 03 марта 2020

Это работает, чтобы соответствовать любому из . , -. Специальные символы регулярных выражений следует экранировать с помощью обратной косой черты.

function sentensify(str) {
   return str.split(/[\.,\-]/).join(" ")
}
0 голосов
/ 03 марта 2020

Вы можете использовать RegEx, указав все символы, на которые вы хотите разбить строку, например /[-.,]/.

Несколько символов в квадратных скобках [-.,] означает поиск любого символа среди заданных символов .

function sentensify(str) {
  return str.split(/[-.,]/).join(' ');
}
console.log(sentensify("May-the-force-be-with-you"));
console.log(sentensify("The.force.is.strong.with.this.one"));
console.log(sentensify("There,has,been,an,awakening"));
0 голосов
/ 03 марта 2020

Вы можете использовать регулярное выражение для этого, чтобы соответствовать всем трем. Но если вы просто собираетесь join массив, возможно, имеет смысл просто replace() их с пробелом.

split ()

var str= "Instead-of-using-split,and,join.why.not-just-use-replace?"
var sep = /[-,.]/g;
console.log( str.split(sep).join(' ') );

replace ()

var str= "Instead-of-using-split,and,join.why.not-just-use-replace?"
var sep = /[-,.]/g;
console.log( str.replace(sep, ' ') );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...