2017-09-22 48 views
-1

我試過/^[^^]+$/,它不允許^,但也不允許我想允許一些特殊字符如<>(。 有沒有任何正則表達式只允許一個符號(^)?如何使正則表達式不接受只有帽子符號(^)

+1

您的問題描述沒有意義。請發佈[mcve]。 – melpomene

+1

你問題的前提是錯誤的。 '/^[^^] + $ /。test('<>()')'返回'true',因爲所有這些字符都與提供的模式匹配。 – zzzzBov

+0

@melpomene它確實有道理。對我來說,他很清楚他要求什麼。他希望有一個正則表達式,除了'^'符號之外,它們都可以匹配。 –

回答

0

everything, but正則表達式看起來不錯。

我想你正在處理多行值。這裏的事情可能會有點棘手。我在regex101上創建了一個樣本,並按預期工作。我得到兩個(多行)匹配:dfasfs <>()爲測試字符串str,見下文。

但是,如果我在Chrome和Firefox控制檯中運行等效代碼,我只會得到一個匹配。

let regex = /^[^^]*$/mg; 
const str = `^ 
^dasdfs 
dasdfs^ 
dasdfsd^df 
dfasfs 
<>() 
^ 
dfasfs 
<>()`; 
let m; 

while ((m = regex.exec(str)) !== null) { 
    // This is necessary to avoid infinite loops with zero-width matches 
    if (m.index === regex.lastIndex) { 
     regex.lastIndex++; 
    } 

    // The result can be accessed through the `m`-variable. 
    m.forEach((match, groupIndex) => { 
     console.log(`Found match, group ${groupIndex}: ${match}`); 
    }); 
} 

這看起來像Chrome的正則表達式引擎的限制或錯誤。
我玩了一下simulate the missing JS/.../sdotatll修飾符與[\ s \ S],但無濟於事。
我在MS邊緣嘗試了相同的,並且我得到了兩場比賽。
所以,如果你處理多行,你可能會遇到瀏覽器特定的問題。