正则表达式匹配两个相同字符串之间的所有字符串

时间:2017-03-07 09:52:48

标签: javascript regex

E.g。我有这个字符串 -- This -- is -- one -- another -- comment -- 我想要匹配的元素 “这个”,“是”,“一个”,“另一个”和“评论”

我正在尝试这个正则表达式 --\s+([^--]+)\s+-- 这给了我匹配的元素 “这个”,“一个”和“评论”

我已经搜索了其他问题,他们都提供了这样的解决方案,即#A#我将获得A但是对于#A#B#我也得到A,但在此case我想要两个元素AB,因为它们都在两个#个字符之间。

我正在测试javascript正则表达式,但我认为解决方案应该与平台/语言无关。

2 个答案:

答案 0 :(得分:1)

要获取所有子字符串,请使用前瞻

/--\s+([\s\S]*?)(?=\s+--)/g
                ^^^^^^^^^

请参阅regex demo

请注意,[^--]+-以外的1个或多个符号匹配,但不匹配任何不等于--的文本。 [...]是与单个字符匹配的字符类。要匹配任何长度的任何文本,从一个char到第一次出现的模式,你可以依赖[\s\S]*?构造:任何0+字符,尽可能少(由于懒惰*?量词)。

JS演示:

var s = '-- This -- is -- one -- another -- comment --';
var rx = /--\s+([\s\S]*?)(?=\s+--)/g;
var m, res=[];
while (m = rx.exec(s)) {
  res.push(m[1]);
}
console.log(res);

答案 1 :(得分:0)

要阅读所有内容,我会使用正面看法:

const data = '-- This -- is -- one -- another -- comment --'

const readAll = data => {
  const regex =/--\s*(.*?)\s*(?=--)/g
  const found = []
  let temp
  while (temp = regex.exec(data)) {
    found.push(temp[1])
  }
  return found
}

console.log(readAll(data))

要删除评论,请执行以下操作:

const data = `-- This -- is -- one -- another -- comment -- this is not a comment`.replace(/--.*--/g, '')

console.log(data)