我试图解析是由由两种分离的key = value对的URL编码的字符串&或&.
以下内容仅匹配第一次出现,将键和值分解为单独的结果元素:
var result = mystring.match(/(?:&|&)?([^=]+)=([^&]+)/)
Run Code Online (Sandbox Code Playgroud)
字符串'1111342 = Adam%20Franco&348572 = Bob%20Jones'的结果将是:
['1111342', 'Adam%20Franco']
Run Code Online (Sandbox Code Playgroud)
使用全局标志'g'将匹配所有匹配项,但仅返回完全匹配的子字符串,而不是分离的键和值:
var result = mystring.match(/(?:&|&)?([^=]+)=([^&]+)/g)
Run Code Online (Sandbox Code Playgroud)
字符串'1111342 = Adam%20Franco&348572 = Bob%20Jones'的结果将是:
['1111342=Adam%20Franco', '&348572=Bob%20Jones']
Run Code Online (Sandbox Code Playgroud)
虽然我可以&单独拆分字符串并分别拆分每个键/值对,但有没有办法使用JavaScript的正则表达式支持来匹配模式的多次出现,/(?:&|&)?([^=]+)=([^&]+)/类似于PHP的preg_match_all()函数?
我的目标是通过某种方式获得结果,子匹配分开如下:
[['1111342', '348572'], ['Adam%20Franco', 'Bob%20Jones']]
Run Code Online (Sandbox Code Playgroud)
要么
[['1111342', 'Adam%20Franco'], ['348572', 'Bob%20Jones']]
Run Code Online (Sandbox Code Playgroud) 在CoffeeScript中,while循环是标准的:
while x()
y()
Run Code Online (Sandbox Code Playgroud)
但是,以下1不起作用:
do
y()
while x()
Run Code Online (Sandbox Code Playgroud)
对于第一个例子,这只是糖:
y() while x()
Run Code Online (Sandbox Code Playgroud)
CoffeeScript是否带有至少执行一次的内置循环?
1另外,do 是一个关键字 - 它用于调用匿名函数.
我正在尝试在coffeescript中编写一个使用beforeEach块的茉莉花测试.这遇到了coffeescript的变量范围问题.这是我想写的:
describe 'PhoneDetailCtrl', () ->
beforeEach () ->
scope = angular.scope()
$browser = scope.$service('$browser')
it 'should fetch phone detail', () ->
scope.params = {phoneId:'xyz'}
$browser.xhr.expectGET('phones/xyz.json').respond({name:'phone xyz'})
ctrl = scope.$new(PhoneDetailCtrl)
expect(ctrl.phone).toEqualData({})
$browser.xhr.flush()
expect(ctrl.phone).toEqualData({name:'phone xyz'})
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为scope和$browser将var在最里面的范围内声明.也就是说,一旦进入beforeEach,然后又在it块中.我可以通过初始化来强制在正确的范围内声明变量,但这看起来很奇怪:
describe 'PhoneDetailCtrl', () ->
$browser = {}
scope = {}
beforeEach () ->
scope = angular.scope()
$browser = scope.$service('$browser')
it 'should fetch phone detail', () ->
scope.params = {phoneId:'xyz'}
...
Run Code Online (Sandbox Code Playgroud)
这可行,但它编译的JavaScript实际上是
describe('PhoneListCtrl', function() {
var $browser, …Run Code Online (Sandbox Code Playgroud)