2017-03-09 112 views
1

我有這樣https://jsfiddle.net/tgvtceg3/返回正則表達式的第一次出現不匹配

var text = "abc(de192/+£,€.&"; 
 
var pattern = new RegExp(/^[0-9a-zA-Z\-\,+&.\/]+$/); 
 
var res = pattern.test(text) 
 
alert(res);

我想要的代碼的代碼返回第一次出現在正則表達式不匹配......例如在THI情況下,我希望「(」

任何建議,歡迎

+1

這真的不清楚是什麼你「問。請提供更多關於您期待的結果的信息,以及爲什麼這對您不適用 –

+0

right ...我編輯了我的帖子 –

+0

[正則表達式停止在第一個匹配]的可能的副本(http://stackoverflow.com/questions/2503413/regular-expression-to-stop-at-first-match) – gyre

回答

2

您只能使用另一個正則表達式來檢查由以前的驗證正則表達式不匹配的文本。使用這樣的事情:

var text = "abc(de192/+£,€.&"; 
 
var pattern = /^[0-9a-zA-Z,+&.\/-]+$/; 
 
var res = pattern.test(text) 
 
if (!res) { 
 
    var m=text.match(/[^0-9a-zA-Z,+&.\/-]+/) || [""]; 
 
    console.log(m[0]); 
 
}

/[^0-9a-zA-Z,+&.\/-]+/正則表達式會發現比你原來的正則表達式定義的其它炭的第一次出現。

編輯:使用動態的方法來圖案製作:

var text = "abc(de192/+£,€.&"; 
 
var block = "0-9a-zA-Z,+&./-"; // Define ranges/chars here 
 
var pattern = new RegExp("^[" + block + "]+$"); // Use constructor notation to build the validation regex 
 
var res = pattern.test(text) 
 
if (!res) { 
 
    var m=text.match(new RegExp("[^" + block + "]+")) || [""]; 
 
    console.log(m[0]); 
 
}

+0

謝謝......你知道我可以如何從這個改變爲dinamically /^[0-9a-zA-Z,+&.// - ] + $/to this/[^ 0-9a-zA-Z,+&。\/- ] +/...替換? –

+0

查看我的編輯,顯示如何動態構建模式。 –

2

你可以有一個負的正則表達式來定義,然後只需使用string.match(regex)即可獲得所有匹配項。

要獲得第一個不匹配,只是做result[0]

正則表達式:/[^0-9a-zA-Z\-\,+&.\/]/g

這將匹配除上述以外的所有字符。

var text = "abc(de192/+£,€.&"; 
 
var pattern = new RegExp(/[^0-9a-zA-Z\-\,+&.\/]/g); 
 
var res = text.match(pattern) 
 
console.log(res); 
 
console.log(res[0]);

0

正如this question

你需要讓你的正則表達式非貪婪的描述,因爲通過 默認,「(。*)」將匹配所有「文件路徑/列弗el1/level2「xxx some =」xxx「。

所以我希望這將有助於,通過添加'?'到你的正則表達式的結尾,使其不真實,並將^移動到正則表達式中的字符部分。 爲調試正則表達式,我使用regex101.com這是偉大的。

var text = "abc(de192/+£,€.&"; 
 
var pattern = new RegExp(/[^0-9a-zA-Z\-\,+&.\/]?/); 
 
var res = pattern.test(text) 
 
alert(res);

0

您可以只需添加一個^到個性外殼的開始尋找任何字符不是它裏面:

var text = "abc(de192/+£,€.&"; 
 
var pattern = new RegExp(/([^0-9a-zA-Z\-\,+&.\/]+)/); 
 
var res = pattern.exec(text); 
 
console.log(res ? res[0] : undefined);

+0

對不起,但請檢查其他答案,因爲這已經包含在1個以上的答案。 – Rajesh

+0

@Rajesh這個答案也簡要地解釋了邏輯以及處理'res'沒有匹配的情況(除了使用'exec'而不使用不需要的'g'修飾符外)。順便說一句,我看到你的答案之前寫了這個。 –

相關問題