Извлечение разделов строки из строки javascript - PullRequest
1 голос
/ 13 апреля 2020

У меня есть эта строка здесь:

var string1 = 'Hello. My name is Bob! I love cats!'

Мне нужно извлечь имя из строки, используя шаблонную строку как своего рода ссылку.

Строка шаблона должна выглядеть примерно так this:

var extract = 'name is *! I'

В этом случае функция вернет ['Bob'].

Звездочка представляет возможные значения для входов. Я знаю, что могут быть гораздо лучшие способы решить эту проблему, но мне было интересно, есть ли способ сделать это так.

Вот пример ожидаемого вывода с использованием другого «шаблона»:

var extract1 = 'have * kids.'
var string1 = 'I am 32 years old. I have 2 kids.'

extract(string1, extract1) //Should return ['2'] or ['have 2 kids.']

//Or, . . .

var extract1 = 'have * kids.'
var string1 = 'I am 32 years old. I have 1+1 kids.'

extract(string1, extract1) //Should return ['1+1'] or ['have 1+1 kids.']

//An optional delimiter parameter could be passed: extract(str1, str2, '*')

Мне показалось, что я вспомнил, что видел нечто подобное в сценарии, сделанном кем-то какое-то время go но со встроенными функциями Javascript. Ребята, вы можете мне помочь? Моя Javascript Терминология не самая лучшая, но я пытался объяснить это как можно лучше. Не стесняйтесь редактировать / исправлять меня.

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

Вы можете извлечь необходимые строки, используя RegExp.

Если вам нужно, чтобы она была функцией, которая принимает два параметра-строки, вы можете просто заменить (в пределах параметра маски) звездочку (*) на (.*), чтобы соответствовать любому количеству символов в группе захвата и сделать из него RegExp равным String.prototype.match() против вашей входной строки и вернуть первую подходящую подстроку:

const testStr = 'I am 32 years old. I have 2 kids.',
      ageMask = 'I am * years old',
      childrenMask = 'I have * kids',
      
      extract = (str, mask) => 
        str.match(new RegExp(mask.replace('*', '(.*)')))[1]
        
console.log('Age is: :', extract(testStr, ageMask))        
console.log('Children: :', extract(testStr, childrenMask))
.as-console-wrapper{min-height:100%;}
1 голос
/ 13 апреля 2020

Вы можете использовать для этого регулярное выражение.

Например, вы хотите сделать извлечение для

var extract1 = 'have * kids.'
var regex = /have .* kids./
var string1 = 'I am 32 years old. I have 2 kids.'
var s = string1.match(regex)
// have 2 kids.

var extract1 = 'have * kids.'
var regex = /have .* kids./
var string1 = 'I am 32 years old. I have 1+1 kids.'
var s = string1.match(regex)
// have 1+1 kids.
...