2

我有一个字符串“add_dinner”、“add_meeting”、“add_fuel_surcharge”,我想获取前面有“add_”的字符(晚餐、会议、fuel_surcharge)。

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

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

[^add_]\w+

这个适用于“add_fuel_surcharge”,但从“add_dinner”中获取“inner”

请帮助我理解。

4

4 回答 4

3

使用捕获组:

/^add_(\w+)$/

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

于 2012-09-01T07:12:33.590 回答
1

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

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

[^add_]a是一个字符类,匹配除,d或之外的单个字符_。当应用于 时add_dinner,它匹配的第一个字符是i\w+然后匹配nner

于 2012-09-01T07:12:33.200 回答
0

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

如果您想在 之后检索该位,_您可以执行以下操作:

/add_(\w+_)/

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

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

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

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

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

于 2012-09-01T07:15:02.843 回答
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(", "));
于 2012-09-01T07:31:25.693 回答