【问题标题】:Extracting sections of a string from a string javascript从字符串javascript中提取字符串的部分
【发布时间】:2020-04-13 13:14:02
【问题描述】:

我这里有这个字符串:

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

我需要使用模板字符串作为参考从字符串中提取名称。

模板字符串应如下所示:

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, '*')

【问题讨论】:

  • 你知道regular expressions吗?
  • 是的,我知道,但我不知道在这种情况下他们会如何帮助改善。

标签: javascript string function templates extract


【解决方案1】:

您可以使用 RegExp 提取必要的字符串。

如果您需要将它作为一个接受两个字符串参数的函数,您可以简单地将(在掩码参数内)星号 (*) 替换为 (.*) 以匹配捕获组中的任意数量的字符并生成 @ 987654321@ 输出到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%;}

【讨论】:

    【解决方案2】:

    您可以为此使用正则表达式。

    例如,您要为

    进行提取
    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.
    

    【讨论】:

    • 我选择了 Yevgen 的答案,因为它的解释稍微好一些。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2021-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多