我想进行分组以在特定字符之后的AND之前选择字符串,在这种情况下它是冒号。
示例:
First: foo Last: bar
我想在第1组匹配First和foo,在第2组匹配Last bar
第1组:First foo
第2组:Last bar
我目前有
([^:]*)+([^:*])
只匹配不是冒号的所有东西,这不是我正在寻找的东西。正则表达式有哪些方式或模式,我可以在某个角色之前和之后匹配?
答案 0 :(得分:2)
如果你想删除冒号,但仍然在一个组中有周围的文本,你需要在执行正则表达式后使用一些字符串操作:
var s = "First: foo Last: bar",
re = /\s*([^:]*?)\s*:\s*([^:\s]*)/g,
result = [];
while (match = re.exec(s)) {
result.push(match[1] + ' ' + match[2]);
}
console.log(result);

请注意,当有更多空格时,哪个词所属的位置可能不明确,例如在First: foo hello there: bar
中。
答案 1 :(得分:0)
你想要进入单一群体的文本不是连续的字符串,因此,它是不可能实现的。你需要分别抓住两个部分,键和值,然后加入它们:
var rx = /([^:]+):\s*(.*?)(?=\w+:|$)/g;
var s = "First: foo Last: bar";
var m, res=[];
while (m=rx.exec(s)) {
res.push([m[1].trim(),m[2].trim()].join(" "));
}
console.log(res);

请参阅regex demo at regex101.com。详细说明:
([^:]+)
- 第1组::
:
- :
\s*
- 0+ whitespaces (.*?)
- 第2组:除了换行符之外的任何0 +字符,尽可能少(?=\w+:|$)
- 后跟1个单词字符和:
或字符串结尾。答案 2 :(得分:0)
您可以使用以下正则表达式:
([a-zA-Z]+:\s*[a-zA-Z]+)
您可以在 HERE 链接上试用。
'First: foo Last: bar'.match(/([a-zA-Z]+:\s*[a-zA-Z]+)/g) // ["First: foo", "Last: bar"]