我想说一个数字1和字符串之间的区别'1'.
我想这样做的原因是因为我想确定成功匹配后正则表达式中捕获括号的数量.根据perlop doc,当模式中没有捕获组时,返回列表(1).因此,如果我得到一个成功的匹配和一个列表(1),那么我无法判断该模式是否没有parens或它有一个paren并且它匹配'1'.如果数字1和字符串之间存在差异,我可以解决这种歧义'1'.
我想捕获包含在文件的某些行中的数字.我正在使用Perl,我正在使用匹配运算符来捕获相对于文件行中其他符号在特定位置发生的数字.这是一个示例行:
fixedStep chrom=chr1 start=3000306 step=1
Run Code Online (Sandbox Code Playgroud)
以下是脚本的相关部分:
while ( <FILE> ) {
if ( $_=~m/fixedStep/ ) {
my $line = $_;
print $line;
my $position = ($line =~ /start\=(\d+)/);
print "position is $position\n\n";
}
Run Code Online (Sandbox Code Playgroud)
$position打印为1,而不是我需要的数字.根据在线正则表达式工具regex101.com,我正在使用的正则表达式工作; 它捕获了该行中的相应元素.
例如,
输入:
{
"id":"abc",
"name": "name-middlenane-lastname-1"
},
{
"id":"123",
"name": "fname-flast-2"
}
Run Code Online (Sandbox Code Playgroud)
回复:
{
"id":"abc",
"name": "name-middlename-lastname-1",
"newkey": "name-middlename-lastname"
},
{
"id":"123",
"name": "fname-flast-2",
"newkey": "fname-flast"
}
Run Code Online (Sandbox Code Playgroud)
每个对象中的文件名是一个字符串,其中包含由“-”连字符分隔的字符和数字。我需要从开头到起始数字的完整字符串。我不想要号码后面的任何内容。然后添加新字段,其键为newkey,值应提取不带数字的字符串。因此,输出应包含旧字段和新字段。
我试图捕获"Rio Grande Do Leste":
...
<h1>Rio Grande Do Leste<br />
...
Run Code Online (Sandbox Code Playgroud)
运用
var myregexp = /<h1>()<br/;
var nomeAldeiaDoAtaque = myregexp.exec(document);
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
更新:
还有2个问题:
1)搜索(文档)没有产生任何结果,但将其更改为(document.body.innerHTML)工作.这是为什么?
2)我不得不将其更改为:myregexp.exec(document.body.innerHTML)[1] ; 得到我想要的东西,否则它会给我一些结果,包括<h1>.这是为什么?
3)(已回答)为什么我需要使用".*"?我认为它会在()之间收集任何东西?
我有这样的正则表达式:
(.*?)("DisplayName":.*?)(,)(.*?"Groups":?)?(\[.*?\])?(,)(.*?"Phones":)?(\[.*?\])?(.*?\},)?
Run Code Online (Sandbox Code Playgroud)
我想用它来处理这样的字符串:
{"Affinity":20,"DisplayName":"Moe Larry","电子邮件":[{"Address":"moelarry@gmail.com","Primary":true,"Type":{"Id":" HOME"}},"FullName":{"FamilyName":"Larry","GivenName":"Moe","Unstructured":"Moe Larry"},"Groups":[{"id":"^ Mine "}","Id":"1234567890","MailsSent":0,"名称":"Moe Larry","电话":[{"数字":"555-999-6661","类型":{ "ID": "移动设备"}}], "ProfileLink": ""},{ "亲和力":20, "显示名称": "stoogesarefunny", "电子邮件":[{ "地址": "stoogesarefunny","主":真}]," EvergreenPhoto ":"/照片/私人/ adflk; jsd394u75430o8752380974321jtkasdljf8937489213749832654" , "ID": "834754hthbf83744823f", "MailsSent":0},{ "亲和力":20, "显示名称":"stoogesarefunny @ gmail.com " "电子邮件":[{ "地址": "stoogesarefunny@gmail.com", "主":真正}], "EvergreenPhoto": "/照片/私营/ asdfAJDKLJSFIOEJHLTHSJKLDF234987s897KJHSDFKJHDF89273473ASLKJDLSKJIFEIH", "ID":" 834754hthbf83744823f ","MailsSent":0,"ProfileLink":" https://profiles.google.com/stoogesarefunny "},{"Affinity":20,"DisplayName":"Shemp","FullName":{"GivenName" : "Shemp" "非结构化": "Shemp"}, "组":[{ "ID": "^矿"}], "ID": "1234567890", "MailsSent":0, "名": "Shemp","手机":[{"号码":" + 15553085671" , "类型":{ "ID": "OTHER"}}]},{ "亲和力":20, "显示名称": "ClownFace", "全名":{ "给定名称": "ClownFace", "非结构化": "ClownFace"}, "组":[{ "ID": "^矿"}], "ID": "1234567890", "MailsSent":0,"名称":" ClownFace", "电话":[{ "号码": …
我有一个像这样的字符串:
123456-1/1234/189928/2323 (102457921)
Run Code Online (Sandbox Code Playgroud)
我想得到102457921.如何使用正则表达式实现它?
我试过了:
"123456-1/1234/189928/2323 (102457921)".replaceAll("(\\.*\()(\d+)(\))","$2");
Run Code Online (Sandbox Code Playgroud)
但它不起作用.任何提示?
我现在正在学习正则表达式。我的要求很简单。这是我的正则表达式。
([0-9]*)(\.)([0-9]*)
Run Code Online (Sandbox Code Playgroud)
我的输入是这样的。
1.9
2.8
4.76
3
7.8
Run Code Online (Sandbox Code Playgroud)
我只想返回小数部分。我目前正在打印第三个捕获组 3 美元。输出是这样的。
9
8
76
3
8
Run Code Online (Sandbox Code Playgroud)
但我的预期输出是这样的。
9
8
76
8
Run Code Online (Sandbox Code Playgroud)
请告诉我如何实现这一目标。每当字符串不匹配时,我的 $3 都会返回整个字符串。我希望它返回 null 或任何其他默认值(如“0”)。是否可以使用环视来实现这一点?如果是这样,怎么办?
我做了一个RegExp格式化传入的日期字符串,但它没有按我的用法预期工作.我希望有人可以解释为什么不:
var data = [
"m_2013_01_01",
"m_2013_02_01",
"m_2013_03_01",
"m_2013_04_01"
];
// why aren't these equivalent?
// expected
console.log(data.map(datum => datum.replace(/^m_(\d+)_(\d+)_(\d+)/g, '$1-$2-$3')));
// ???
console.log(data.map(datum => datum.replace(/^m_(?:(\d+)_?){3}$/g, '$1-$2-$3')));Run Code Online (Sandbox Code Playgroud)