我試圖想出一個正則表達式來檢測Javascript中的字符串是否被修剪。這意味着,它的開頭或結尾沒有空格。Javascript:檢測一個字符串是否被修剪
到目前爲止,我有
^[^\s].*[^\s]$
這工作如果字符串很長,但對於短字符串,如a
,因爲該模式想要一個非空格,任何字符,然後又非它不會工作-空間。 a
被修剪,但不符合該模式。
幫我看看正確的正則表達式。
我試圖想出一個正則表達式來檢測Javascript中的字符串是否被修剪。這意味着,它的開頭或結尾沒有空格。Javascript:檢測一個字符串是否被修剪
到目前爲止,我有
^[^\s].*[^\s]$
這工作如果字符串很長,但對於短字符串,如a
,因爲該模式想要一個非空格,任何字符,然後又非它不會工作-空間。 a
被修剪,但不符合該模式。
幫我看看正確的正則表達式。
嘗試使用此方法使第二個字符可選:
^[^\s](.*[^\s])?$
正如令人難以置信的驚人的馬克安東預計。這工作。 –
'regex.test('a') true regex.test('a') true regex.test('a')' true'這不能正常工作!即使在開始或結束時有空間,它也表現出真實性。 –
編輯了答案。應該現在工作... –
一種選擇是把你現有的正則表達式(^[^\s].*[^\s]$
),並添加一個單獨的部分,它專門用於測試一個非空格字符(^[^\s]$
),兩個部分用|
結合:
/(^[^\s]$)|(^[^\s].*[^\s]$)/
但我有時會發現這是簡單測試了相反的情況,然後用!
反轉的結果。所以你的情況,有開頭或空格結束的正則表達式測試:
!/(^\s)|(\s$)/.test(someString)
的功能封裝:
function isTrimmed(s) {
return !/(^\s)|(\s$)/.test(s)
}
console.log(isTrimmed(" a ")) // false
console.log(isTrimmed("a ")) // false
console.log(isTrimmed(" a")) // false
console.log(isTrimmed("a")) // true
console.log(isTrimmed("abc")) // true
console.log(isTrimmed("a b c")) // true
console.log(isTrimmed("")) // true
您可以使用下面的正則表達式:
^([\s]+[\w]*)?([\w]*[\s]+)?$
可能不是最好的答案,但Negative lookahead應該工作:對非空格字符
/^(?!(?:.*\s$)|(?:^\s.*)).*$/
(?=^\S)
先行在字符串的開頭(不消耗字符串匹配;將再次從第一個字符開始匹配)[\W\w]*
匹配任何數目的字符所以對於a
結束\S$
匹配非空格字符:
(?=^\S)
匹配a
在字符串的開頭(重置當前位置到字符串的開頭)[\W\w]*
匹配任何字符,因爲它需要\S$
匹配a
在字符串
爲什麼正則表達式的結束相匹配的下一個部分? IMO'str.trim()=== str'更具可讀性 – Kaiido
我在這裏沒有使用命令式編程。這就是爲什麼我需要聲明一個正則表達式。更確切地說,我在validate.js中使用了這個正則表達式,它是一個指定驗證器和東西的庫。所以你說的這條線在這裏不會有用。 –
確定不夠... – Kaiido