我的文字
1618148163#@#JASSER-PC#-#1125015374#@#anas kayyat#-#1543243035#@#anas kayyat#-#
结果应该是:
JASSER-PC
anas kayyat
anas kayyat
我正在使用:
(?<=#@#)(.+)(?=#-#)
但它给了我:
JASSER-PC#-#1125015374#@#anas kayyat#-#1543243035#@#anas kayyat
答案 0 :(得分:4)
JavaScript的正则表达式不支持后置断言(即(?<=…)
和(?<!…)
),因此您无法使用该正则表达式。但你可以用这个:
#@#(.+)(?=#-#)
然后只取第一组的匹配字符串。此外,为了尽可能少地匹配,请使用+
使+?
量词非贪婪。
答案 1 :(得分:0)
JavaScript不支持lookbehinds。使量词不贪婪,并使用:
var regex = /#@#(.+?)#-#/g;
var strings = [];
var result;
while ((result = regex.exec(input)) != null) {
strings.push(result[1]);
}
答案 2 :(得分:0)
小组(.+)
将尽可能多地匹配(它是“贪婪的”)。要使其找到最小匹配,您可以使用(.+?)
。
答案 3 :(得分:0)
我会给你一个非正则表达式的答案,因为使用正则表达式并不总是合适的,无论是速度还是正则表达式本身的可读性:
function getText(text) {
var arr = text.split("#@#"); // arr now contains [1618148163,JASSER-PC#-#1125015374,anas kayyat#-#1543243035,anas kayyat#-#]
var newarr = [];
for(var i = 0; i < arr.length; i++) {
var index = arr[i].indexOf("#-#");
if(index != -1) { // if an array element doesn't contain "#-#", we ignore it
newarr.push(arr[i].substring(0, index));
}
}
return newarr;
}
现在,使用
getText("1618148163#@#JASSER-PC#-#1125015374#@#anas kayyat#-#1543243035#@#anas kayyat#-#");
返回您想要的内容。