如何过滤前一个正则表达式组的结果并保留原始组的结果

时间:2019-07-12 02:51:29

标签: javascript regex regex-lookarounds regex-group

使用 JavaScript Regex ,我需要基于以下字符串:

word1 w'or""d2 word3
"word4"word5
word6

具有以下结果:

word1
word2
word3
word4word5
word6

我尝试过:

\S+/gm

https://regex101.com/r/nsIA2Y/2

虽然可以根据空格正确地对单词进行分组,但是,我无法像示例中那样找到一种方法来删除将分组单词保持在一起的“和”字符。尝试了几种分组方法,但是我的知识有限。 / p>

请也说明解决方案。

3 个答案:

答案 0 :(得分:2)

您可以通过调用.replace来对匹配的数组进行后处理:

const str = `word1 w'or""d2 word3
"word4"word5
word6`
var arr = str.match(/\S+/g).map(s => s.replace(/['"]+/g, ''))

console.log(arr)
//=> ["word1", "word2", "word3", "word4word5", "word6"]

.map()方法将创建一个新数组,其结果是对从.replace()函数获得的每个元素调用提供的函数(在本例中为.match())。

答案 1 :(得分:1)

您可以使用此正则表达式/[^\w\s]/来执行此操作。 /[^\w\s]/将对所有非单词或空格的字符进行数学运算,然后使用replace()将其删除。

演示:

var a = `word1 w'or""d2 word3`;
var b = `"word4"word5`;
var c = `word6`;

console.log(a.replace(/[^\w\s]/g, '').replace(/\s/g, '\n'));
console.log(b.replace(/[^\w\s]/g, '').replace(/\s/g, '\n'));
console.log(c.replace(/[^\w\s]/g, '').replace(/\s/g, '\n'));

答案 2 :(得分:1)

可以通过替换字符串来简单地解决此问题,并且似乎没有必要使用正则表达式,或者如果这样,则也许可以使用此表达式来解决。

const regex = /["']+/gm;
const str = `word1 f'dfretretr""ret word2 word3

"word4"word5
word6 word7
`;
const subst = ``;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.log(result);

this demo的右上角对表达式进行了说明,如果您想探索/简化/修改它,在this link中,您可以观察它如何与某些示例输入步骤匹配一步一步,如果您喜欢。