我有这样的文字
a b:_c
一个:_c
我使用的正则表达式是/:(.*)/g
,但它也捕获了':_'
我想要实现 - > c
我得到了什么 - > :_ c
如何排除它们?
P.S。:将空格替换为下划线,以便于理解。
编辑:我想抓住':'
背后的一切EDIT2:这里有regexr文字,正如您所见,它还会捕捉':'
答案 0 :(得分:0)
您可以使用:/:\s(.*)/g
。
这将在开始捕获之前捕获:
之后的单个空格:
a b: c => "c"
a: c => "c"
var re = /:\s(.*)/;
var tests = [
'a: c',
'a: cat',
'b a: test',
'a: c',
'Test: this is the rest of the sentence',
];
for (var i = 0; i < tests.length; i++) {
console.log('TEST: ', '"' + tests[i] + '"');
console.log('RESULT: "' + tests[i].match(re)[1] + '"');
}
注意:您 必须 从匹配中获取第一个捕获组。如果不这样做,您将无法获得所需的结果。有关如何执行此操作的信息,请参阅How do you access the matched groups in a JavaScript regular expression?。
答案 1 :(得分:0)
如果您知道下划线将始终作为c
的前缀,您可以这样做:
/:_?(.*)/g
_?
匹配0或1个下划线,因此您只能得到c
。
console.log('a b:_c'.match(/:_?(.*)/)[1])
&#13;
答案 2 :(得分:0)
您想获取字符串“c”还是最后一个字符?
var a = "a:_c a b:_c";
/c/g.exec(a)
/.$/g.exec(a)
编辑以匹配评论:
使用以下内容删除“:_”
之前的所有内容a.replace(/.*:_*/, '')
对于空间:
a.replace(/.*:\s*/, '')