Regex在测试时返回组,但在代码中不返回
Regex returns groups when testing but not in code?
我使用以下代码从一段文本中提取三组:
#sample test string: 'Photo Badge <img src="https://res.cloudinary.com/surveyplanet/image/upload/v1384554966/gdm1z8joraciwjszpygg.png">'
pattern = ///
(.*) #Match all text before the image tag
<img'ssrc="(.*)"> #Match the image tag and extract the image URL
(.*) #Match all text after the image tag
///g
_.map question.choices, (choice) ->
[pre, url, post] = choice.choice_text.match(pattern)[1..3]
console.log 'pre', pre
console.log 'post', post
console.log 'url', url
由于某种原因,无论我传入什么,唯一填充的组都是pre
。我在这里测试了相同的正则表达式,它按预期分组。有人知道为什么会这样吗?
问题是您的RegExp中的g
标志。根据MDN JS文档,当g
标志存在时,String::match和RegExp::exec有不同的行为。
因此,String::match
不是返回所有捕获组,而是返回在字符串中找到的所有匹配。
你的问题有两个解决方案:
- 删除
g
标志(为什么你需要它,无论如何?)。 - 使用
pattern.exec(str)
代替str.match(pattern)
这看起来是由于你把它分解成每行的方式?
我想在你的例子中,你实际上是在说
(.*)'n<img'ssrc="(.*)">'n(.*)
这就解释了为什么pre是匹配的,而其他的不是。
我不知道Java是不是这样,但我在x++中做了类似的事情,这就是我的问题。
相关文章:
- 从我的控制器返回一个不同于200的代码以触发ajax错误,这被认为是一种好的做法吗
- 返回按钮代码段的Jquery冲突
- .val()返回未定义的.text返回随机代码
- 如何使HTML5颜色选择器返回颜色名称而不是颜色代码
- 为什么这个代码返回NaN
- 这个代码会返回false吗
- 如何从一系列级联异步代码中返回值
- 角度方法返回未绘制的代码
- 我可以获得用Ajax调用的函数的返回代码吗
- 我无法从javascript函数中获取返回代码
- 无法获取输出.返回代码206.缺少值
- 在 cordova 项目中,我正在使用文件传输插件上传个人资料照片,它总是返回代码 1 错误
- AngularJS: $sce.trustAsHtml 以文本形式返回代码
- 带有返回代码和返回消息的 PHP 函数,以供参考
- Dojo.request for iteminfo-在Fiddler中返回代码200,但在浏览器中返回代码0
- 解析云代码:beforeSave查询返回代码不起作用
- AJAX返回代码200,但引发错误
- XMLHttpRequest运行返回代码
- ASP.NET:如何传递窗口.返回C#代码的值
- NodeJS: HTTP GET返回代码而不是JSON对象