我有一个字符串“add_dinner”、“add_meeting”、“add_fuel_surcharge”,我想获取前面有“add_”的字符(晚餐、会议、fuel_surcharge)。
[^a][^d]{2}[^_]\w+
我试过这个,但它只适用于“add_dinner”
[^add_]\w+
这个适用于“add_fuel_surcharge”,但从“add_dinner”中获取“inner”
请帮助我理解。
我有一个字符串“add_dinner”、“add_meeting”、“add_fuel_surcharge”,我想获取前面有“add_”的字符(晚餐、会议、fuel_surcharge)。
[^a][^d]{2}[^_]\w+
我试过这个,但它只适用于“add_dinner”
[^add_]\w+
这个适用于“add_fuel_surcharge”,但从“add_dinner”中获取“inner”
请帮助我理解。
使用捕获组:
/^add_(\w+)$/
检查返回的数组以查看结果。
由于 JavaScript 不支持后向断言,因此您需要使用捕获组:
var myregexp = /add_(\w+)/;
var match = myregexp.exec(subject);
if (match != null) {
result = match[1];
}
[^add_]
a
是一个字符类,匹配除,d
或之外的单个字符_
。当应用于 时add_dinner
,它匹配的第一个字符是i
,\w+
然后匹配nner
。
该[^...]
构造匹配除列出的字符之外的任何单个字符。因此[^add_]
匹配除“a”、“d”或“_”之外的任何单个字符。
如果您想在 之后检索该位,_
您可以执行以下操作:
/add_(\w+_)/
括号“捕获”内部表达式的一部分。因此,要从字符串中获取实际文本:
var s = "add_meeting";
var result = s.match(/add_(\w+)/)[1];
这假设字符串将匹配,以便您可以直接获取返回数组中的第二个元素,该元素将是匹配的“会议”部分(\w+)
。
如果您有可能测试一个不匹配的字符串,您需要测试结果match()
是否不为空。
(或者,可能更容易理解result = "add_meeting".split("_")[1];
:)
您可以过滤_
字符串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(", "));