如何获得前缀为“add_”的字符

时间:2012-09-01 07:09:13

标签: javascript regex

我有一个字符串“add_dinner”,“add_meeting”,“add_fuel_surcharge”,我希望得到前面带有“add_”的字符(晚餐,会议,燃料充电)。

[^a][^d]{2}[^_]\w+

我试过这个,但它只适用于“add_dinner”

[^add_]\w+

这个适用于“add_fuel_surcharge”,但是从“add_dinner”获取“内部”

请帮助我理解。

4 个答案:

答案 0 :(得分:3)

使用捕获组:

/^add_(\w+)$/

检查返回的数组以查看结果。

答案 1 :(得分:1)

由于JavaScript不支持lookbehind断言,因此您需要使用捕获组:

var myregexp = /add_(\w+)/;
var match = myregexp.exec(subject);
if (match != null) {
    result = match[1];
}

[^add_]是一个与ad_除外的单个字符匹配的字符类。应用于add_dinner后,其匹配的第一个字符为i\w+则匹配nner

答案 2 :(得分:0)

[^...]构造匹配除列出的字符之外的任何单个字符。因此[^add_]匹配“a”,“d”或“_”以外的任何单个字符。

如果要在_之后检索位,可以执行此操作:

/add_(\w+_)/

括号中“捕获”内部表达式的一部分。所以要从字符串中获取实际文本:

var s = "add_meeting";
var result = s.match(/add_(\w+)/)[1];

这假定字符串将匹配,以便您可以直接获取返回数组中的第二个元素,该元素将是匹配(\w+)的“会议”部分。

如果您有可能测试不匹配的字符串,则需要测试match()的结果不为空。

(或者,可能更容易理解:result = "add_meeting".split("_")[1];

答案 3 :(得分:0)

您可以按_

过滤JavaScript for loop字符串
var str = ['add_dinner', 'add_meeting', 'add_fuel_surcharge'];
var filterString = [];

    for(var i = 0; i < str.length; i ++){
        if(str[i].indexOf("_")>-1){
            filterString.push(str[i].substring(str[i].indexOf("_") + 1, str[i].length));
        }
    }
alert(filterString.join(", "));