使用多个模式构建span标记的正则表达式

时间:2010-10-18 01:35:30

标签: javascript regex

除了它们之外,我对正则表达式一无所知...... :(

我在javascript函数中有这段代码:

var foroFormatting = function (text) {
    var newText = text;
    var findreps = [
        { find: /^([^\-]+) \- /g, rep: '<span class="ui-selectmenu-item-header">$1</span>' },
        { find: /([^\|><]+) \| /g, rep: '<span class="ui-selectmenu-item-content">$1</span>' },
        { find: /([^\|><\(\)]+) (\()/g, rep: '<span class="ui-selectmenu-item-content">$1</span>$2' },
        { find: /([^\|><\(\)]+)$/g, rep: '<span class="ui-selectmenu-item-content">$1</span>' },
        { find: /(\([^\|><]+\))$/g, rep: '<span class="ui-selectmenu-item-footer">$1</span>' }
    ];
    for (var i in findreps) {
        newText = newText.replace(findreps[i].find, findreps[i].rep);
    }
    return newText;
}

此代码需要一个像这样的字符串

John Doe - 78 West Main St Apt 3A | Bloomsburg, PA 12345 (footer text)

并将它分成四个跨度元素吧?

我想将相同的格式应用于与

略有不同的字符串
John Doe - 78 West Main St Apt 3A | Bloomsburg, PA 12345

如何修改正则表达式?

修改

我正在尝试使用this plugin(第三个示例),其中包含一个与上一部分中的原始字符串不同的字符串

4 个答案:

答案 0 :(得分:1)

如果您要删除的只是(footer text),那么没有最后替换正则表达式的相同函数将起作用。

var foroFormatting2 = function (text) {
    var newText = text;
    var findreps = [
        { find: /^([^\-]+) \- /g, rep: '<span class="ui-selectmenu-item-header">$1</span>' },
        { find: /([^\|><]+) \| /g, rep: '<span class="ui-selectmenu-item-content">$1</span>' },
        { find: /([^\|><\(\)]+)$/g, rep: '<span class="ui-selectmenu-item-content">$1</span>' }
    ];
    for (var i in findreps) {
        newText = newText.replace(findreps[i].find, findreps[i].rep);
    }
    return newText;
}

我删除了捕获并格式化(footer text)的部分。我建议你阅读regular expressions。它们是一个很好的工具。

答案 1 :(得分:1)

您无需更改任何内容,代码完美无需括号中的页脚文本

答案 2 :(得分:1)

好吧,让我给你一些提示,让这个超级简单。将输入格式更改为此。

这是一个JSON格式的字符串数组。

var arr = ['John Doe', '78 West Main St Apt 3A', 'Bloomsburg, PA 12345', '(footer text)'];
var outputStr = '<span class="ui-selectmenu-item-header">' + 
       //This line concats the array elements with this text inserted
       // between each element
       arr.join('</span><span class="ui-selectmenu-item-header">') + 
'</span>';

答案 3 :(得分:0)

您是否考虑过修改输入格式,也许是JSON?这看起来像一个非常脆弱的解析格式。

预期产量究竟是多少?使用所需的跨度