我有通过TCP传递给我的字符串内容。此信息仅相关,因为这意味着我不会一直检索相同的字符串。我有一个<start>
和<stop>
分隔符,以确保每次通过TCP获取数据时,我都会输出完整的内容。
我的传入内容如下:
<start>Apple Bandana Cadillac<stop>
我希望在<start>
和<stop>
之间获取所有内容。所以只需Apple Bandana Cadillac
。
我这样做的脚本如下:
servercsv.on("connection", function(socket){
let d_basic = "";
socket.on('data', function(data){
d_basic += data.toString();
let d_csvindex = d_basic.indexOf('<stop>');
while (d_csvindex > -1){
try {
let strang = d_basic.substring(0, d_csvindex);
let dyson = strang.replace(/<start>/g, '');
let dson = papaparse.parse(dyson);
myfunction(dson);
}
catch(e){ console.log(e); }
d_basic = d_basic.substring(d_csvindex+1);
d_csvindex = d_basic.indexOf('<stop>');
}
});
});
这意味着我在<stop>
字符串之前获取所有内容并输出它。我还添加了一行let dyson = strang.replace(/<start>/g, '');
,因为我想删除<start>
文字。
但是,因为这是TCP,我无法保证获得此字符串的所有部分。因此,我经常收回stop>Apple Bandana Cadillac<stop>
或其中的一些变体(例如start>Apple Bandana Cadillac<stop>
。这不够完整,我只能做strang.replace("start>", "")
理想情况下,我希望我的分隔符选择介于<start>
和<stop>
之间的内容。不只是<stop>
。但是,我不确定该怎么做。
或者,我也可以选择在我的while循环中检索<start><stop>
个字符串的所有组合的正则表达式,然后删除它们。因此,请单独检查<, s, t, a, r, t
,依此类推。但不确定如何实现正则表达式来删除整个字符串的部分。
答案 0 :(得分:5)
假设您得到完整回复:
var test = "<start>Apple Bandana Cadillac<stop>";
var testRE = test.match("<start>(.*)<stop>");
testRE[1] //"Apple Bandana Cadillac"
如果<start>
和<stop>
之间有新行
var test = "<start>Apple Bandana Cadillac<stop>";
var testRE = test.match("<start>([\\S\\s]*)<stop>");
testRE[1] //"Apple Bandana Cadillac"
在此处使用正则表达式捕获组。
答案 1 :(得分:3)
使用replace()
方法尝试此正则表达式:
/<st.*?>(.*?)(?!<st)/g
<强>字面........................................... ......: <st
任何字符数为零{或}次{... 3}}: .*?
<强>字面........................................... .......: >
开始lazily ..........................: (
任何字符数为零{或}次{... 3}}: .*?
结束capture group .............................: {{1} }
开始lazily .................: )
<强>字面........................................... ........: (?!
结束capture group ....................: <st
在下面的演示中,请注意测试示例包含多行,以及)
和<start>
(基本上为<stop>
)的差异。
<st
“说我有
var rgx = /<st.*?>(.*?)(?!<st)/g; var str = `<start>Apple Bandana Cadillac<stop> <stop>Grapes Trampoline Ham<stop> <start>Kebab Matador Pencil<start>`; var res = str.replace(rgx, `$1`); console.log(res);
Grapes Trampoline Hamop>
...仍在尝试删除字符串的所有部分<stop>
”
<stop>
一个简单的解释必须要做,因为演示1等一步一步会花费太多时间。
/^(.*?>)(.*?)(<.*?)$/gm;
/m
..........开始行。 ^
..懒洋洋地捕捉所有内容直到文字(.*?>)
........ [以[{1}}返回] >
...然后懒洋洋地抓住所有东西,直到................ [以[{1}}返回] $1
..文字(.*?)
并且懒洋洋地抓住所有内容直到... [以[{1}}返回] $2
...........结束行。诀窍是替换第二次捕获(<.*?)
并单独留下<
和$3
。
$