我创建了一个正则表达式,从特定的字符串模式中提取地理坐标(十进制格式)数据

正在工作的字符串示例:11.18531,88.782928.34329,123.4865521.11912,145.8543036.29781,-13.06121-16.35564,-36.0706531.86691,122.2836638.84814,-140.1020418.58158,59.20813

这里我想用-个符号来提取纬度和经度值.

但我想完全拒绝一些字符串模式:-76.84933,-141.64907helno-16.3993,-11.2359-77.7678er,161.978669.8149,-l61.90415.9333,10.1rr667jkl11.18531,88.78292hh

但是上面的字符串中很少有通过regex.test()的,比如true:-76.84933,-141.64907helno-16.3993,-11.23595.9333,10.1rr667jkl11.18531,88.78292hh.对于这些类型的字符串,我想返回false.不应该为这些字符串找到匹配项.这些都受到了严重的污染,不想对它们进行进一步的研究.

参观https://regex101.com/r/rT6YvD/1,看看我正在使用的regexplayground .

这是我无法实现的.请帮忙!!!

我感激地接受了任何建议.提前谢谢.

推荐答案

你可以用

(?<lat>-?\b(?<!\b-)\d+\.\d+)(?<comma>,)(?<long>-?\d+\.\d+)\b

regex demo.Details:

  • (?<lat>-?\b(?<!\b-)\d+\.\d+)-组"lat":可选的-,一个单词边界,前面没有一个字符的-,然后是一个或多个数字,.和一个或多个数字
  • (?<comma>,)-组"逗号":一个逗号
  • (?<long>-?\d+\.\d+)-组"长":可选-、一个或多个数字、.和一个或多个数字
  • \b-单词边界

如果需要确保字符串仅包含坐标,可以删除所有空白,然后判断整个字符串是否与坐标模式匹配:

const match = text
    .replace(/\s+/g, '')
    .match(/^(?<lat>-?\d+\.\d+)(?<comma>,)(?<long>-?\d+\.\d+)$/);

这里,^匹配字符串的开头,$匹配字符串的结尾.

Javascript相关问答推荐

Javascript,部分重排序数组

如何在Javascript中使用Go和检索本地托管Apache Arrow Flight服务器?

如何根据当前打开的BottomTab Screeb动态加载React组件?

为什么useState触发具有相同值的呈现

为什么我的getAsFile()方法返回空?

有条件重定向到移动子域

Webpack在导入前混淆文件名

OpenAI转录API错误请求

在FAQ Accodion应用程序中使用React useState时出现问题

令牌JWT未过期

如何找到带有特定文本和测试ID的div?

如何更改Html元素S的 colored颜色 ,然后将其褪色为原始 colored颜色

是否可以在不更改组件标识的情况下换出Reaction组件定义(以维护状态/引用等)?如果是这样的话,是如何做到的呢?

在没有任何悬停或其他触发的情况下连续交换图像

在Press Reaction本机和EXPO av上播放单个文件

将字符串解释为数字;将其重新编码为另一个基数

不允许在对象文本中注释掉的属性

将Windows XP转换为原始数据以在html前端中显示

错误400:当我试图在React中使用put方法时,该字段是必需的

打字脚本中的函数包装键入