我有一个字符串“add_dinner”,“add_meeting”,“add_fuel_surcharge”,我希望得到前面带有“add_”的字符(晚餐,会议,燃料充电)。
[^a][^d]{2}[^_]\w+
我试过这个,但它只适用于“add_dinner”
[^add_]\w+
这个适用于“add_fuel_surcharge”,但是从“add_dinner”获取“内部”
请帮助我理解。
答案 0 :(得分:3)
使用捕获组:
/^add_(\w+)$/
检查返回的数组以查看结果。
答案 1 :(得分:1)
由于JavaScript不支持lookbehind断言,因此您需要使用捕获组:
var myregexp = /add_(\w+)/;
var match = myregexp.exec(subject);
if (match != null) {
result = match[1];
}
[^add_]
是一个与a
,d
或_
除外的单个字符匹配的字符类。应用于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(", "));