E.g。我有这个字符串
-- This -- is -- one -- another -- comment --
我想要匹配的元素
“这个”,“是”,“一个”,“另一个”和“评论”
我正在尝试这个正则表达式
--\s+([^--]+)\s+--
这给了我匹配的元素
“这个”,“一个”和“评论”
我已经搜索了其他问题,他们都提供了这样的解决方案,即#A#
我将获得A
但是对于#A#B#
我也得到A
,但在此case我想要两个元素A
和B
,因为它们都在两个#
个字符之间。
我正在测试javascript正则表达式,但我认为解决方案应该与平台/语言无关。
答案 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)