使用JavaScript在任意位置将精确单词与新行匹配

使用JavaScript在任意位置将精确单词与新行匹配,javascript,regex,Javascript,Regex,如何使用JavaScript编程语言匹配以下模式 样本(不是样本词中的样本) 萨姆\n sa\n示例 我使用\b作为完整单词匹配的边界。 我正试图找到一种有效的方法,在世界上任何地方进行新行匹配。 对于案例2:\bsam[\s\s]ple\b有效。 同样的方法也可适用于案例3,以匹配 但是,有没有一种方法可以让单个模式匹配所有这些内容?看起来您在问如何将字符串与字符串中任意位置的单个可选空格匹配?如果是这样,看起来是这样的: function getRegEx(word) { var pat

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

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

萨姆\n

sa\n示例

我使用\b作为完整单词匹配的边界。 我正试图找到一种有效的方法,在世界上任何地方进行新行匹配。 对于案例2:\bsam[\s\s]ple\b有效。 同样的方法也可适用于案例3,以匹配


但是,有没有一种方法可以让单个模式匹配所有这些内容?

看起来您在问如何将字符串与字符串中任意位置的单个可选空格匹配?如果是这样,看起来是这样的:

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
但是,如果字符串中可以有多个空格(如在“s amp le”中),则如下所示:

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
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('') + '$')
}
根据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) {
  word = word.split('')
  word = word.map(function (letter) {
    return letter + '\\s?'
  })
  return new RegExp('^' + word.join('') + '$')
}

getRegEx('pattern').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

您可以使用
替换
删除
\n
,并使用单词边界将其与
示例
进行比较:

/\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

到目前为止你试过什么?提供代码的相关部分,因此,我们有一些东西可以开始。考虑一下字符串函数和/或正则表达式,然后再回到这里。我只是给出了更多的信息,在这个问题中,不需要只把一个构造放到字符类中,除非你计划给它添加更多的符号。括号是不必要的,但不会造成伤害。实际上,我认为在查看RegExp.source字符串时会更清楚。但按你的方式去做。这并不是说我有问题,但是,有没有一种方法我可以在模式本身中指定在单词的任何地方查找0个或更多空格字符?我需要一点澄清:你的意思是你想指定不定数目的空格出现的位置?或者它们可以在字符串中的任何位置,并且可以有不确定的数目我试图在最新的编辑中提供这两种方式。很抱歉造成混淆。我明白解决办法。我只是想知道在正则表达式中是否有一种方法(通过使用组或类似的东西)可以提到,一个空格可以出现在任何地方,在一个给定的单词中可以无限次出现。这样我想避免动态构建模式。