RegEx字符串拆分器

时间:2011-06-28 18:03:57

标签: javascript regex

我在这里做错了什么?我试图从这个“列表”中提取

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

由于

6 个答案:

答案 0 :(得分:3)

您的第二个\s*与第三行的换行符匹配,因此如果您更改为仅显式匹配空格和短划线,则如下所示

(article)(\s*)([^\s]+)(([ -]*)(.*))

你得到了理想的结果

http://jsfiddle.net/Z94wf/37/

答案 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'));
});

http://jsfiddle.net/jasongennaro/Z94wf/35/

答案 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|'));
});

获取输出。

您可以在http://jsfiddle.net/Z94wf/76/

查看工作演示

答案 5 :(得分:1)

为了追查这样的问题,我发现Regex Powertoy非常有帮助。您可以输入示例文本和正则表达式,并大量了解匹配如何工作(或不工作)。超方便的:

http://regex.powertoy.org/