$re = '~(?:\$|jQuery)\.mage\.__\((?s)[^\'"]*?([\'"])(.+?)(?<!\\\\)\1(?s).*?\)~';
$str = '/**
* Copyright © 2013-2017 Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
\'jquery\',
\'ko\',
\'module\',
\'../template/renderer\',
\'mage/translate\'
], function ($, ko, module, renderer) {
\'use strict\';
var locations = {
\'legend\': \'Caption for the fieldset element\',
\'label\': \'Label for an input element.\',
\'button\': \'Push button\',
\'a\': \'Link label\',
\'b\': \'Bold text\',
\'strong\': \'Strong emphasized text\',
\'i\': \'Italic text\',
\'em\': \'Emphasized text\',
\'u\': \'Underlined text\',
\'sup\': \'Superscript text\',
\'sub\': \'Subscript text\',
\'span\': \'Span element\',
\'small\': \'Smaller text\',
\'big\': \'Bigger text\',
\'address\': \'Contact information\',
\'blockquote\': \'Long quotation\',
\'q\': \'Short quotation\',
\'cite\': \'Citation\',
\'caption\': \'Table caption\',
\'abbr\': \'Abbreviated phrase\',
\'acronym\': \'An acronym\',
\'var\': \'Variable part of a text\',
\'dfn\': \'Term\',
\'strike\': \'Strikethrough text\',
\'del\': \'Deleted text\',
\'ins\': \'Inserted text\',
\'h1\': \'Heading level 1\',
\'h2\': \'Heading level 2\',
\'h3\': \'Heading level 3\',
\'h4\': \'Heading level 4\',
\'h5\': \'Heading level 5\',
\'h6\': \'Heading level 6\',
\'center\': \'Centered text\',
\'select\': \'List options\',
\'img\': \'Image\',
\'input\': \'Form element\'
},
/**
* Generates [data-translate] attribute\'s value
* @param {Object} translationData
* @param {String} location
*/
composeTranslateAttr = function (translationData, location) {
var obj = [{
\'shown\': translationData.shown,
\'translated\': translationData.translated,
\'original\': translationData.original,
\'location\': locations[location] || \'Text\'
}];
return JSON.stringify(obj);
},
/**
* Sets text for the element
* @param {Object} el
* @param {String} text
*/
setText = function (el, text) {
$(el).text(text);
},
/**
* Sets [data-translate] attribute for the element
* @param {Object} el - The element which is binded
* @param {String} original - The original value of the element
*/
setTranslateProp = function (el, original) {
var location = $(el).prop(\'tagName\').toLowerCase(),
translated = $.mage.__(original),
translationData = {
shown: translated,
translated: translated,
original: original
},
translateAttr = composeTranslateAttr(translationData, location);
$(el).attr(\'data-translate\', translateAttr);
setText(el, translationData.shown);
},
/**
* Checks if node represents ko virtual node (nodeType === 8, nodeName === \'#comment\').
*
* @param {HTMLElement} node
* @returns {Boolean}
*/
isVirtualElement = function (node) {
return node.nodeType === 8;
},
/**
* Checks if it\'s real DOM element
* in case of virtual element, returns span wrapper
* @param {Object} el
* @param {bool} isUpdate
* @return {Object} el
*/
getRealElement = function (el, isUpdate) {
if (isVirtualElement(el)) {
if (isUpdate) {
return $(el).next(\'span\');
}
return $(\'<span/>\').insertAfter(el);
}
return el;
},
/**
* execute i18n binding
* @param {Object} element
* @param {Function} valueAccessor
* @param {bool} isUpdate
*/
execute = function (element, valueAccessor, isUpdate) {
var original = ko.unwrap(valueAccessor() || \'\'),
el = getRealElement(element, isUpdate),
inlineTranslation = (module.config() || {}).inlineTranslation;
if (inlineTranslation) {
setTranslateProp(el, original);
} else {
setText(el, $.mage.__(original));
}
};
/**
* i18n binding
* @property {Function} init
* @property {Function} update
*/
ko.bindingHandlers.i18n = {
/**
* init i18n binding
* @param {Object} element
* @param {Function} valueAccessor
*/
init: function (element, valueAccessor) {
execute(element, valueAccessor);
},
/**
* update i18n binding
* @param {Object} element
* @param {Function} valueAccessor
*/
update: function (element, valueAccessor) {
execute(element, valueAccessor, true);
}
};
ko.virtualElements.allowedBindings.i18n = true;
renderer
.addNode(\'translate\', {
binding: \'i18n\'
})
.addAttribute(\'translate\', {
binding: \'i18n\'
});
});
';
preg_match($re, $str, $matches, PREG_OFFSET_CAPTURE, 0);
// Print the entire match result
var_dump($matches);
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for PHP, please visit: http://php.net/manual/en/ref.pcre.php