我在这里做错了什么?我试图从这个“列表”中提取
ARTICLE 11 - Title AA
ARTICLE 22 Title BB
ARTICLE 33
ARTICLE 44 - Title DD
ARTICLE 55 Title EE
每篇文章的所有文章编号和标题(如果有的话)。 标题存在时,“ - ”是可选的。
使用此RegEx
(article)(\s*)([^\s]*)((\s*)(-)?(\s*)(.*))
我只得到4件物品。项目33和44仅被视为一篇文章,我想这只是因为“第33条”没有标题。
11|Title AA
22|Title BB
33|ARTICLE 44 - Title DD
55|Title EE
请在此处查看代码:http://jsfiddle.net/Z94wf/
修改
我期望得到的是:
11|Title AA
22|Title BB
33|
44|Title DD
55|Title EE
由于
答案 0 :(得分:3)
您的第二个\s*
与第三行的换行符匹配,因此如果您更改为仅显式匹配空格和短划线,则如下所示
(article)(\s*)([^\s]+)(([ -]*)(.*))
你得到了理想的结果
答案 1 :(得分:2)
我无法确定您输入的所有形式,但是对于少数群体和更明确的内容会怎么样......
ARTICLE\s+(\d+)[\s-]*(.*)
这应该匹配起始文字,后跟一些空格后跟数字,然后是一组可选的空格和“ - ”字符,然后是其他所有内容。
答案 2 :(得分:1)
我相信这就是你想要的
$(document).ready(function(){
var s = $('#in').val();
var re = /(article)(\s)([0-9][0-9])((\s|-)*)/gi;
$('#out1').val(s.replace(re,'$3|$5'));
});
答案 3 :(得分:1)
$(document).ready(function(){
var s = $('#in').val();
var re = /article\s*(\d+)[ -]*(.*)/gi;
$('#out1').val(s.replace(re,'$1|$2'));
});
答案 4 :(得分:1)
使用此正则表达式:
$(document).ready(function(){
var s = $('#in').val();
var re = /^article\s+([^\s]+)(?:$|\s*(-\s*)?)/gmi;
$('#out1').val(s.replace(re,'$1|'));
});
获取输出。
查看工作演示答案 5 :(得分:1)
为了追查这样的问题,我发现Regex Powertoy非常有帮助。您可以输入示例文本和正则表达式,并大量了解匹配如何工作(或不工作)。超方便的: