使用JavaScript在任何地方使用新行匹配确切的单词

时间:2015-12-14 15:50:51

标签: javascript regex

如何使用JavaScript编程语言匹配以下模式?

样本(不是样本中的样本)

SAM \ NPLE

SA \ nmple

我使用\ b作为全字匹配的边界。 我正试图找到一种有效的方法来在单词的任何地方进行换行匹配。 对于案例2:\ bsam [\ s \ S] ple \ b有效。 同样可以适用于case3以匹配。

但是,有没有办法让所有这些单一模式匹配?

2 个答案:

答案 0 :(得分:1)

您好像在询问如何将字符串与字符串中的单个可选空格匹配进行匹配?如果是这样,那就是这样的:

function getRegEx(word) {
  var patterns = word.split('').map(function (letter, index) {
    return (
      word.slice(0, index) +
      '\\s?' +
      word.slice(index)
    )
  })
  patterns.shift()
  return new RegExp('^' + patterns.join('|') + '$');
}

getRegEx('pattern').test('pat tern') // --> true

但是,如果字符串中可以有多个空格(如“&”中所示),那么它将如下所示:

function getRegEx(word) {
  word = word.split('')
  word = word.map(function (letter) {
    return letter + '\\s?'
  })
  return new RegExp('^' + word.join('') + '$')
}

getRegEx('pattern').test('pat tern') // --> true

根据OP的要求(见评论):

如果要查找无限数量的空格字符,请将true传递给以下函数(作为第二个参数)。否则,它只会找到一个:

function getRegEx(word, mult) {
  var spaceCount = mult ? '*' : '?'
  word = word.split('')
  word = word.map(function (letter) {
    return letter + '\\s' + spaceCount
  })
  return new RegExp('^' + word.join('') + '$')
}

getRegEx('pattern', true).test('pat     tern') // --> true

如果您希望指定模式空间中的位置,可以按如下方式进行:

function getRegEx(word, mult) {
  word = word.split('')
  var spaceCount = mult ? '*' : '?'
  var positions = []
  word.forEach(function (char, index) {
    if (char === ' ') positions.push(index)
  })
  positions.forEach(function (pos) {
    word.splice(pos, 1, '\\s' + spaceCount)
  })
  return new RegExp('^' + word.join('') + '$')
}

在模式字符串中的任何位置放置空格以匹配空格。如:

getRegEx('p at tern', true).test('p at tern') // --> true

答案 1 :(得分:1)

您可以使用\n删除replace,并使用字边界将其与sample进行比较:

/\bsample\b/i.test('sa\nmple'.replace(/\n/g, ''))
true
/\bsample\b/i.test('sam\nple'.replace(/\n/g, ''))
true
/\bsample\b/i.test('sample'.replace(/\n/g, ''))
true
/\bsample\b/i.test('sample'.replace(/\n/g, ''))
true
/\bsample\b/i.test('some sam\nple'.replace(/\n/g, ''))
true
\bsample\b/i.test('sam\nples'.replace(/\n/g, ''))
false