同じ問題に直面し、元の正規表現パターンを逆にして、後読みを先読みに置き換えることで問題を解決しました。最後のトリックは、正規表現に対してテストされる入力文字列を逆にすることです。
このアイデアは、JavaScriptのブログ投稿にあるStevenLevithanのMimickingLookbehindで詳しく説明されています。
以下は、動作中の正規表現を確認できる私のテストページです。
<html>
<head>
<title>Phone Number RegExp Test Page</title>
</head>
<body>
<script>
function validateInput() {
var phoneRegex = new RegExp("^(\\d+\\s?(x|\\.txe?)\\s?)?((\\)(\\d+[\\s\\-\\.]?)?\\d+\\(|\\d+)[\\s\\-\\.]?)*(\\)([\\s\\-\\.]?\\d+)?\\d+\\+?\\((?!\\+.*)|\\d+)(\\s?\\+)?$", "i");
var input = document.getElementById("tbPhone");
var value = input.value.split("").reverse().join("");
alert(phoneRegex.test(value));
}
</script>
<input type="text" id="tbPhone" />
<button onclick="javascript:testPhone()">Validate</button>
</body>
</html>