Javascript 使用正则表达式识别以特定字符(#)结尾的所有标记/单词
我花了大约6个多小时的时间在网上搜寻,试图找出以下几点:Javascript 使用正则表达式识别以特定字符(#)结尾的所有标记/单词,javascript,regex,string,pattern-matching,Javascript,Regex,String,Pattern Matching,我花了大约6个多小时的时间在网上搜寻,试图找出以下几点: 我需要一个javascript正则表达式来标识#字符位于标记的末尾 标记分隔符是一个空白 我有以下正则表达式:/(\w+[#])/ig 3a。上述正则表达式的问题是,它将返回99999#和999#和a#dfkjdf#dfd#(散列位于字符串/令牌中间) 测试数据看起来像一个文本字符串: (78890)asbcjh-(78890 999)werer 9999)今天(999)a)dfkjdf(dfd)f 因此,结果集应为9999 ,仅适用于上
#
字符位于标记的末尾/(\w+[#])/ig
3a。上述正则表达式的问题是,它将返回99999#
和999#
和a#dfkjdf#dfd#
(散列位于字符串/令牌中间)(78890)asbcjh-(78890 999)werer 9999)今天(999)a)dfkjdf(dfd)f
9999
,仅适用于上述情况"78890"1ASBCJH-"78890 999"Werr 9999"999"今天"a"dfkjdf"dfd"f
99999#今天#
结尾的令牌/单词,例如UPS09870
(可能是UPS办公地点,我只需要UPS)
我们的应用程序还有一个“接受”功能(基于Regex),它将保持UPS值
PS-我有正则表达式来测试以
开头的单词/标记,如下所示:/(^\s)#((-124;\ w+)/ig
提前感谢您的帮助。您可以使用
/(?:^|\s)\w+#(?!\S)/g
看
详细信息
-字符串或空格的开头(?:^ |\s)
-1+字字符\w+
-a
字符
-在(?!\S)
之后需要空格或字符串结尾#
console.log(
“"78890"asbcjh-"78890 999"Werr 9999"999"今天"a"dfkjdf"dfd"
.match(/(?:^|\s)\w+#(?!\s)/g)
.map(函数(x){return x.trim();})
)
我根本不会使用正则表达式,它们对这项任务来说太过分了
function accept(s) {
return s.split(' ').filter(x => x.endsWith('#'));
}
结果将是一个匹配单词的数组。如果您想要一个包含列表的字符串,请将
.join(“”)
添加到链的末尾。您可以将split()
和filter()
方法与结合使用,以获得所需的结果:
str.split(" ").filter(v => v.match(/\w+#$/));
演示:
这是一个工作演示:
var str=“#78890#1ASBCJH-#78890 999#werer 9999#今天#999#a#dfkjdf#dfd#;
var results=str.split(“”).filter(v=>v.match(/\w+#$/);
console.log(results);
我也尝试了一些解决方案:
\b(\W+)*[y] [b/p>对不起,格式化,这些数字应该使阅读更容易。我的答案提供了正则表达式解决方案。请考虑通过点击接受答案。✓ 如果我的答案对您有帮助,请单击左侧(请参见)并向上投票(请参见)确实比正则表达式好,很好的方法。@chŝdk它还有对不匹配的字符不敏感的优点。
\w
。是的,确实使用它是100%安全的,不管#前面的字符是什么,你比我先到了;)谢谢你的回答。不幸的是,它必须是一个正则表达式。@AndyS为什么?如果这是人为的限制(例如,因为这是家庭作业),你应该这么说。正则表达式上的/g
限定符是多余的。@Alnitak是的,我已经指出了,我只是从我测试的正则表达式101复制了它。谢谢;)当然,您可以通过从正则表达式中完全省略\w+
来确保这个“安全”的re:other字符,即v.match(/#$/)
。嗯,是的,这是真的,尽管OP从未明确定义什么是令牌。我的.endsWith()
解决方案在技术上也存在同样的问题。